最近看了thoughtworks的精选文集,第一章就是对象健身操,定了了九条编码规范:
1. 方法只使用一级缩进。
2. 拒绝使用else关键字。
3. 封装所有的原声类型和字符串。
4. 一行代码只有一个‘.'运算符。
5. 不用使用缩写。
6. 保持实体对象简单清晰。
7. 任何类中的实例变量都不要超过2个。
8. 使用一流的集合。
9. 不使用任何Getter/Setter/Property。

 方法如果有太多缩进,可以通过extract method的方法消除。这里它还提到了一个原则就是方法的行数尽量控制在5行之内。这样对单个方法来说确实是简单了不少,但过多的方法调用是否也影响了代码的可读性?

 丑陋的if-else, 相信不少人都看到过类似的讨论,但究竟有多少人在用strategy pattern, Null Object pattern? 实用和完美,你选择哪个?

  第3条的意思是像integer,String这些类型都是没有意义的,它们仅代表了一个值。如果你有一个方法setHour(int hour),应该写成这样setHour(Hour hour),定义一个Hour类来代表小时,代码的可读性会大大提高,也保证了不会传递一个诸如year的错误值给它。这条倒是蛮有挑战性的。值得尝试下。

  4和5我倒是赞同,也是我平时一直在强调的。

  第6条,每个类的长度不能超过50行,我想应该不包括注释和import吧,不过50行确实是个挑战,想想我们自己写的类,哪个不是上百行的,有的甚至达到了千行。

  第7条:大多数的类应该只负责处理单一的状态变量,有些时候也可以拥有两个状态变量。每当为类添加一个实例变量,就会立即降低类的内聚性。一般而言,编程时如果遵守这些规则,你会发现只有两种类,一种类只维护一个实例变量的状态;另一种类只负责协调两个独立的变量。不要让这两种职责同时出现在一个类中。比如:

  Class Name {
      String first;
      String middle;
      String last;
  }

  可拆成这样:
  Class Name {
     Surname family;
     GivenNames given;
   }
 
  Class Surname{
      String family;
   }

  Class GivenNames {
      List<String> names;
   }

  第8条: 任何包含集合的类都不能再包含其他的成员变量。每个集合都被封装在自己的类中,这一条其实跟第3条类似。集合其实是一种应用广泛的原声类型,它具有很多行为,但对于代码的读者和维护者来说,与集合相关的代码通常都缺少对语义意图的解释。

  第9条: 上一条规则的最后一句话几乎可以直接通向这条规则。如果可以从对象之外随便询问实例变量的值,那么行为与数据就不可能被封装到一处。在严格的封装边界背后,真正的动机是迫使程序员在完成编码之后,一定要为这段代码的行为找到一个合适的位置,确保它在对象模型中的唯一性。

 
  参考资料: http://www.infoq.com/cn/minibooks/thoughtworks-anthology

 


 

 

 


posted on 2009-10-28 10:48 Aaron.Chu 阅读(1592) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

留言簿(5)

随笔档案(57)

相册

友情链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜