九部迈向优秀软件设计?——《The ThoughtWorks Anthology》感悟
以我目前的水平与经验实在是不该读这本书。将《The ThoughtWorks Anthology》中文名译为《软件开发沉思录》,可见译者是用心了。此书收录多篇短文,探讨敏捷开发需要注意到的方方面面,倒是经验之谈。可惜我经验不足,完全没法理解。
书中一篇名为《对象健身操》提出来优秀软件设计练习需要遵守的九项规则:
1.方法只使用一级缩进(我有些惊讶)
2.拒绝使用else关键字(这可能吗?我相当惊讶)
3.封装所有的原生类型和字符串(这个还好)
4.一行代码只使用一个“.”运算符
5.不要使用缩写(麻烦了)
6.保持实体对象简单清晰
7.任何类中的实体变量都不要超过两个
8.使用一流的集合
9.不使用任何Getter/Setter/Property
来看两个奇怪的
规则1:方法只使用一级缩进
例子是
代码
class Board{
....
String board(){
StringBuffer buf=new StringBuffer();
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
buf.append(data[i][j]);
}
return buf.toString();
}
}
改为
Class Board{
...
String board(){
StringBuffer buf =new StringBuffer();
collectRows(buf);
Return buf.toString();
}
void collectRows(StringBuffer buf ){
for(int i=0;i<10;i++)
collectRow(buf,i);
}
void collectRow(StringBuffer buf,int row){
for(int i=0;i<10;i++)
buf.append(data[row][i]);
buf.append("\n");
}
我的理解是将稍微有些大的函数都分成最小的了。当然函数太长必然不好,可弄出这么多这么短的函数,真的有益于项目开发吗?
2.拒绝使用else关键字
这看起来最不可思议,例子如下
public static void endMe(){ if(status==DONE) dosomething(); else <other> }
作者推荐这样去掉else
public static void endMe(){ if(status==DONE){ dosomething(); return(); } <other> }
还有个例子:
public static Node head(){ if(isAdvancing()) return first; else return last; }这么改public static Node head(){ return isAdvancing()? first:last; }这么一看似乎我也经常写些不用else的代码,但要全部禁用else关键字,有必要么?由于我没啥经验,希望大家探讨一下