Take the first bullet! (上)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值