演化架构与紧急设计: 测试驱动设计,第 1 部分
2009-11-05 00:00:00 来源:WEB开发网
清单 8. 简单的 factorsFor() 方法public static int[] factorsFor(int number) {
return new int[] {number};
}
虽然这个方法可以工作,但是它使我完全停了下来。将 isFactor() 方法变成静态方法似乎是个好主意,因为它只不过根据其输入返回一些内容。但是,现在我也已经使 factorsFor() 方法成为了静态方法,意味着我必须将名为 number 的参数传递给两个方法。这段代码将变得非常过程化,这是过分使用静态的副作用。为了解决此问题,我将重构已有的两个方法,这很简单,因为到目前为止我只有很少的代码。重构后的 Classifier 类显示在清单 9 中:
清单 9. 改进后的 Classifier 类public class Classifier2 {
private int _number;
public Classifier2(int number) {
_number = number;
}
public boolean isFactor(int factor) {
return _number % factor == 0;
}
}
我把数字变成是 Classifier2 类中的成员变量,这将允许我避免将其作为参数传递给一大堆静态方法。
我的分解列表中的下一件事表明我需要找到数字的因子。因此,我的下一个测试应当检查这一点(如清单 10 中所示):
清单 10. 下一个测试:数字的因子@Test public void factors_for_6() {
int[] expected = new int[] {1, 2, 3, 6};
Classifier2 c = new Classifier2(6);
assertThat(c.getFactors(), is(expected));
}
更多精彩
赞助商链接