WEB开发网
开发学院软件开发Java 演化架构与紧急设计: 测试驱动设计,第 1 部分 阅读

演化架构与紧急设计: 测试驱动设计,第 1 部分

 2009-11-05 00:00:00 来源:WEB开发网   
核心提示: 现在,我将试着实现返回给定参数的因子数组的方法,演化架构与紧急设计: 测试驱动设计,第 1 部分(8),如清单 11 中所示: 清单 11. getFactors() 方法的第一步publicint[]getFactors(){List<Integer>factors=newArra

现在,我将试着实现返回给定参数的因子数组的方法,如清单 11 中所示:


清单 11. getFactors() 方法的第一步
public int[] getFactors() { 
  List<Integer> factors = new ArrayList<Integer>(); 
  factors.add(1); 
  factors.add(_number); 
  for (int i = 2; i < _number; i++) { 
    if (isFactor(i)) 
      factors.add(i); 
  } 
  int[] intListOfFactors = new int[factors.size()]; 
  int i = 0; 
  for (Integer f : factors) 
    intListOfFactors[i++] = f.intValue(); 
  return intListOfFactors; 
} 

这段代码允许测试通过,但是再考虑一下,它十分糟糕!在使用测试研究实现代码的方法时有时会出现这种情况。这段代码中哪些部分非常糟糕?首先,它非常长而且复杂,并且它也有 “不止一件事” 的问题。我的本能指引我返回 int[],但是它给底部的代码增加了很多复杂度而没有给我带来任何好处。开始过多地考虑怎样做才能使将来可能调用此方法的方法更方便,将令您遭遇危险的处境。您需要一个非常有说服力的理由才能在此接合点添加复杂的内容,而我还没有那样的理由。查看这段代码,我发现 factors 也应当作为类的内部状态而存在,使我可以分解该方法的功能。

测试显现的有益特性之一是真正内聚的方法。Kent Beck 在十分有影响力的 Smalltalk Best Practice Patterns 一书中提到了这一点。在该书中,Kent 定义了一种名为组合方法(composed method)的模式。组合方法模式将定义三条主要语句:

上一页  3 4 5 6 7 8 9  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接