Take the first bullet! (上)

原创 2004年10月01日 20:59:00

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?那是因为将来再去改变设计的代价将会非常昂贵。

 

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

LightOJ 1294:Positive Negative Sign(数学)

Description Given two integers: n and m and n is divisible by 2m, you have to write down the first n...
  • zhaihao1996
  • zhaihao1996
  • 2016年05月31日 14:07
  • 102

linq中的Single()、First()、Take(1) 区别

Single():操作一个集合,同时强要求只有一个对象匹配,并返回这一个。 First():操作一个集合,可以有多个对象匹配,但是只返回第一个。 Take(1):操作一个集合,可以有对个对...
  • lucifer517
  • lucifer517
  • 2012年05月18日 14:23
  • 1342

LightOJ 1294 Positive Negative Sign【大水】

Description Given two integers: n and m and n is divisible by 2m, you have to write down the firs...
  • liuke19950717
  • liuke19950717
  • 2015年11月08日 13:09
  • 216

spark RDD算子(九)之基本的Action操作 first, take, collect, count, countByValue, reduce, aggregate, fold,top

first, take , collect, count, countByValue, reduce, aggregate , fold, top, takeOrdered, foreach 等Ac...
  • T1DMzks
  • T1DMzks
  • 2017年04月24日 23:37
  • 1320

Chess HDU - 5724 (博弈)(sg函数)

Alice and Bob are playing a special chess game on an n × 20 chessboard. There are several chesses on...
  • Coldfresh
  • Coldfresh
  • 2017年08月28日 22:19
  • 131

LightOJ 1294

Positive Negative Sign F - Positive Negative Sign Time Limit:2000MS     Memory Limit:32768KB    ...
  • u012910051
  • u012910051
  • 2016年08月06日 10:23
  • 112

hdu 5702 Solving Order(结构体排序 水题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5702 Solving Order Time Limit: 2000/1000 MS (Java/...
  • qiqi_skystar
  • qiqi_skystar
  • 2016年07月01日 11:35
  • 2658

bulletphysics初识

第一步,当然是搜索bulletphysics,经过筛选,会得到如下有用信息: 百度百科:开源物理引擎一堆套话,忽略不计; Bullet官方:http://bulletphysics.org/wor...
  • takaya000
  • takaya000
  • 2012年09月18日 21:57
  • 1289

Bullet 刚体与软体的碰撞 collisions between rigidbody and softbody in Bullet

上一篇文章做了一个bullet刚体自由落体的模拟,这篇文章模拟软体与刚体的碰撞,并且让软体保持碰撞后的形状。...
  • showonstage1
  • showonstage1
  • 2014年11月03日 18:48
  • 1584

Bullet physics 引擎的官方文档翻译

Bullet 2.83 Physics SDK Manual  https://raw.githubusercontent.com/bulletphysics/bullet3/92a34440762a...
  • mybbs2200
  • mybbs2200
  • 2017年04月12日 16:31
  • 1126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Take the first bullet! (上)
举报原因:
原因补充:

(最多只允许输入30个字)