九部迈向优秀软件设计?——《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关键字

这看起来最不可思议,例子如下

 

1
2
3
4
5
6
public static void endMe(){
   if(status==DONE)
        dosomething();
   else
        <other>
}

作者推荐这样去掉else

 

1
2
3
4
5
6
7
public static void endMe(){
   if(status==DONE){
        dosomething();
       return();
   }
        <other>
}
1
还有个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
<pre class="brush:java">public static Node head(){
   if(isAdvancing())
       return first;
   else
        return last;
}</pre>
<pre class="brush:java">这么改</pre>
<pre class="brush:java"><pre class="brush:java">public static Node head(){
    return isAdvancing()? first:last;
}
</pre>
这么一看似乎我也经常写些不用else的代码,但要全部禁用else关键字,有必要么?</pre>
<pre class="brush:java">由于我没啥经验,希望大家探讨一下</pre>

 

 

 

 

posted on   超然台上仙  阅读(1916)  评论(3编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端

导航

< 2010年1月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6
Find more freelance jobs on GetAFreelancer
点击右上角即可分享
微信分享提示