一 简洁设计原则
Bob大叔借鉴过多位行业大牛说过的话,总结出构建简洁之道:
运行所有测试
重构:消除重复,保证表达力,尽可能减少类和方法的数量。
不可重复
表达了程序员的意图
尽可能减少类和方法的数量
以上规则按照重要程度排列
二 命名必须有有意义
包含有variable、method、parameter、class、package,甚至是jar文件,war文件,ear文件。那么该怎么命名呢,有很多的规则
名副其实:选一个好名字,也许会花费很多的时间,但省下来的时间比花掉的多,我们读和写的比例是远远大于5:1的。
避免误导:必须避免留下掩藏代码本意的错误线索。
做有意义的区分:应以读者能鉴别不同之处的方式来区分,比如DTO、VO、PO等,读者一眼便知其来源。
使用读的出来的名称。
尽量使用可搜索的名称。例:int WORK_DAYS_PER_WEEK=5;
避免使用前缀,前缀无意义。
避免思维映射:不应让读者把你的名称翻译为他们熟知的名称。
类名优化:避免使用Data、Info这样的类名。类名不应是动词。
方法名:方法名应为动词或动词短语。如:deletePage、save。
每个概念对应一个词:我理解和DDD中的业务术语有点类似,对于同样的名称要有同样的认知。
别用双关语
使用解决方案领域名称:ArrayList在java中一定是所有程序员都知道的。
使用源自所涉及问题领域的名称。
添加有意义的语境。
三 函数(method)
参考类,juc中的ReentrantLock.java,我看完所有的代码,发现最长的一个method是15行,大多是1到5行代码就搞定。
短小
只做一件事:判断函数是否只做一件事,就是看是否还能再拆出一个函数
每个函数一个抽象层级:这一条比较难理解,就比如将大象装进冰箱一样,可以分为3个步骤开门->装大象->关门。而在装大象之前需要进行判断冰箱的大小和大象的大小以及冰箱中是否有其他东西,那么3大步骤是一个层级的,其他的是第二层级,还可能有第三层级。简而言之,就是分层。
switch语句:尽量少用,switch语句本身就是用来处理多件事的,而用抽象工厂可能会更好一点。
使用描述性的名称
参数:零参数最好,其次是一,再次是二,应尽量避免三。
无副作用:不要把另外一件事隐藏到这个函数中,避免函数做不在名称描述中的第二件事。
分隔指令与询问:函数要么做什么事,要么回答什么事,但二者不可兼得。
使用异常替代返回错误码
Don’t repeat yourself
结构化编程:每个函数都应该只有一个入口,一个出口。
四 注释
注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。代码可以表达清楚的事情,就不要用注释。除非你要写复杂的并发代码,或者是通用框架类,否则一般的业务代码就尽量不要用到注释。代码可以被修改,但别人基本不会修改你写的注释,这会使得注释具有误导性。真实只有一处地方有:代码。代码会告诉你它做的事情,唯一准确的信息来源。
注释掉的代码直接删除,无需留着,源代码控制工具(git,svn)会帮我们记录这一切的。
五 格式
我们大多数人使用的开发工具(eclipse和idea),已经自带了格式化规范。在代码写完之后,使用快捷键格式化一下即可。
函数如果有调用的关系,则尽量把他们放在一起,而且调用者应该尽可能放在被调用者上边。
这里需要提一下的就是代码规范规则,目前国内Java行业标准有阿里开源的开发规范,已经被很多的公司采用,使用阿里规范作为标准也是不错的。
六 对象和数据结构
对于面向对象编程来说,这一章的内容其实意义不是特别大,因为基本的规则现在已经定义好了。只是Bob大叔当时的代码理念可能还没有像现在这么全面。唯一需要说的就是迪米特法则(Law of Demeter),这个我会在附录中列举出来。
七 错误处理
使用异常而非返回码
先写try/catch/finally语句
使用不可控异常,一层层向上抛出
给出异常发生的环境说明,在抛出异常时,记录下堆栈信息。
依调用者需要定义异常类
自定义异常类
别返回null值
别传递null值
八 边界
在和第三方的接口进行交互的时候,极力推荐将应该让别人知道的方法放出来,而其他对别人无用的接口则封装起来。
对第三方的代码编写一些测试,以便新版本发布后,还可以继续使用。
假定一些dummy数据来作为第三方数据的来源。
对于第三方的接口,我们可以用Adapter模式来做一些适配。
九 测试
测试这一章基本放弃了,因为我们公司不注重测试,也没有写过单元测试。但规则还是一样的。
十 类
类应该尽量设计的短小一些。这里会涉及到3个原则,单一职责原则、开闭原则和依赖倒置原则。
————————————————
版权声明:本文为CSDN博主「Monkey KevinWu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012663412/article/details/119604153