CSDN博客

img chita

Take the first bullet! (上)

发表于2004/10/1 20:59:00  510人阅读

Take the first bullet

 

软件的需求总是在不断的发生着变化。客户昨天可能希望这样,而明天却要那样,搞得我们几乎没有办法开始编码的工作了。以前一种非常流行的做法是在设计中预测可能产生需求变化的地方,留下一个Hook,使得这种变化发生的时候,可以方便的应对,而不需要推翻原来的设计。

 

然而不幸的是,程序员的这种预测往往是错误的,这种变化可能永远也没有发生。然而这个为了预防变化的钩子已经留在了代码里,你不得不负上维护的责任。维护一个无用的东西实在不是一种很好的体验,而你又不能简单地把那个Hook去掉,因为那样可能会使原来正常工作的代码崩溃。事实这个时候,你的代码已经散发出一种Needless Complexity(无用的复杂性)的不良气味。

 

那么我们应该怎样既可以避免这种情况,又能自如地应对变化呢?敏捷方法的一个口号就是:拥抱变化。那么让我们看看该怎么做。

 

敏捷方法提倡当客户提出一项需求时,用最简单地方法实现它,完全不要去预测将来可能的扩展。为什么呢?答案很明显:此时变化可能出现的方向是成千上万的,你根本不能准确预测,会在什么地方需要扩展。那么当变化发生的时候,我们该怎么做呢?这时我们必须改变原有的设计,并且保证下次又产生相同性质的变化时候,新的设计可以方便地进行扩展。这就是Robert Martin在《敏捷软件开发》一书里说的"We take the first bullet, and the we make sure we are protected from any more bullets coming from that gun."

 

然而,可能有人会提出一个问题,这种作法并没有解决问题,为什么我们要事先放在Hook?那是因为将来再去改变设计的代价将会非常昂贵。

 

是的,这一现象是事实,然而在敏捷开发中,我们使用其它的方法来保证这种变化会尽早地发生。那就是使用迭代式的开发,不断发布小版本,让用户尽快得看到软件,并提供反馈。这样才不至于在无可挽救时,用户才发现原来某个功能并不是他们想像中的那样。

阅读全文
0 0

相关文章推荐

img
取 消
img