`

知道KISS原则吗

阅读更多

KISS原则就是Keep It Simple and Stupid. 简单是软件设计之美, 简单的设计使得软件产品易于开发, 易于维护. 简单代表着高质量, 少加班, 每个人都希望自己的工作是简单的.

在KISS原则之外, 应该有一个更重要的原则: Useful. 满足需求是一切产品的低限. 也许需求本身也应该KISS, 简单的需求意味着底成本, 高效率. 可惜客户有时候很难克制自己的欲望. 也许站在客户角度看见的KISS和我们开发者眼中的KISS不完全是一个概念. 有人说: 好的设计是客户做出来的, 开发者其实只是在帮助客户做设计.

Keep
It Simple and Stupid, 最难的在于Keep. 一个人做一个Simple的设计并不难, 难的是让这个设计在需求变化的过程中保持简单. Keep是关键, Keep的时间就是这个设计的生命. 当一个产品无法再Keep Simple的时候, 维护就变的越来越困难, 渐渐的无法加入任何变化, 他的生命也就快结束了. 升级意味着重新做一个.

Keep Simple就是要抵抗需求的变化, 一开始的需求总是比较简单, 比如这样: 设计一个汽车驾驶程序, 他会在遇到红灯的时候停下来, 绿灯的时候向前进.

方案一:

if red_light then
    
stop()
else if green_light then
    go()
end if


这是一个简单的需求, 给出的解决方案也很简单. But, 如果遇到这样的情景: 红灯已经亮了, 但是车前面有个人正在过马路, 他走的很慢. 这个时候当然不能go, 应该按响车喇叭, 等他走过去. 方案一必须要修改: 

if red_light then
    
stop()
else if green_light then
    
if people_ahead then
        ring()
    
else
        go()
    
end if
end if


现实的情况仍然可能发生变化, 比如: 前面尽管是绿灯, 但是横向路口一辆救护车开过来, 或者前面有一个路牌"道路维修请绕行"......种种情况, 其结果就是要在原来的if-else里面加上一个新的判断.

这是一个Simple的设计, 但是很难Keep Simple. 当这个代码片断不断增加, 长度突破500行的时候, 任何相关的需求变更都是一场恶梦. 在软件开发中更复杂的情况我想大家都遇到过.

5
4
分享到:
评论
4 楼 ThatDay1986 2008-06-06  
neomac.lin 的解释很精彩,受益不少
3 楼 tigershuang 2008-06-06  
to:neomac.lin,great ideation !
2 楼 linginfanta 2008-06-06  
kiss就是接吻
1 楼 neomac.lin 2008-06-06  
首先 KISS不是一个原则,只是一个指引。

另外你的例子用过程式语言做例子,不是太能说明问题

int iscleartogo =0;
int events = 0;
function void crossStree(car){
    iscleartogo = checkenviroment();
    if (iscleartogo) {go(car)}
    else {stop(car)}
}
function void go(car){}
function void stop(car){}

function int checkenviroment(){
   if (events >0) return 0
   else return 1;
}

function void eventhappened(){//call be others.
   events++;
}

而且你犯了一个基本的错误,把run time的条件变成compile time的条件

一个判定式,如果有多种变数的话,必须把这些多种变数抽象。
用OO的话:
class car {
  public void crossStreet(Street street){
   if ( stree.isClearToGo()) then
      this.go()
    else 
      this.stop()
    end if
  }
  private void stop(){

  }
}
class Street {
  private EventList eventsToStopCar;
  public boolean isClearToGo(){
    return  (eventsToStopCar.size>0)
  }
  private void onEventHappen(Event event){
    eventsToStopCar.add(event)

  }
}

这些例子可以在你提供的前提条件下应付各种情景。而且对代码本身无更改。

正确的编程思想实现高效开发,不正确的编程思想只会降低效率,这一点我倒是很同意。

相关推荐

Global site tag (gtag.js) - Google Analytics