九部迈向优秀软件设计?——《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> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端