演化架构与紧急设计: 测试驱动设计,第 2 部分
2009-11-05 00:00:00 来源:WEB开发网可组合的方法
第 1 部分 中提到的测试驱动开发的好处之一是可组合性,也就是采用 Kent Beck 提出的组合方法模式。组合方法可以用许多内聚的方法构建软件。TDD 能够促进这种做法,因为为了进行测试,必须把软件分解为小的功能块。组合方法生成可重用的构建块,有助于产生更好的设计。
在 TDD 驱动的解决方案中,方法的数量和名称反映了这种思想。下面是 TDD 完全数分类程序的最终版本中的方法:
isFactor()
getFactors()
calculateFactors()
addFactor()
sumOfFactors()
isPerfect()
下面通过一个示例说明组合方法的好处。假设您已经编写了完全数查找程序的 TDD 版本,而您公司中的另一个开发组编写了完全数查找程序的后测试版本(第 1 部分 中有一个示例)。现在,您的用户慌慌张张地跑来说,“我们还必须判断盈数和亏数!” 盈数 的因子的总和大于数字本身,而亏数 的因子的总和小于数字本身。
在后测试版本中,所有逻辑都放在一个方法中,他们必须重写整个解决方案,把盈数、亏数和完全数都涉及的代码分离出来。但是,对于 TDD 版本,只需要编写两个新方法,见清单 10:
清单 10. 支持盈数和亏数public boolean isAbundant() {
calculateFactors();
return sumOfFactors() - _number > _number;
}
public boolean isDeficient() {
calculateFactors();
return sumOfFactors() - _number < _number;
}
这两个方法所需的惟一任务是把 calculateFactors() 方法重构为类的构造函数。(这对于 isPerfect() 方法没有害处,但是现在它在所有三个方法中重复出现,因此应该重构)。
更多精彩
赞助商链接