代码的坏味道
坏味道01:缺乏业务含义的命名
错误命名
- 宽泛的命名
- 用技术术语命名
命名遵循的原则
- 描述意图,而非细节
- 面向接口,不面相实现(用books而不是booklist)
- 使用业务语言(团队内建立词汇表)
谨记
好的命名,是体现业务含义的命名(让产品经理要看得懂)
坏味道02:Don’t Repeat Yourself
重复的代码
- ctrl CV的代码
- 结构重复的代码
- if和else中语句高度类似的代码
谨记
不要重复自己,不要复制粘贴
坏味道03:长函数
消灭长函数的原则
- 定义好长函数的标准(比如20行为界,团队内定义)
- 关注点越多越好,粒度越小越好
- 坚守“童子军军规”(“让营地比你来时更干净”)
谨记
把函数写短,越短越好
坏味道04:大类
产生大类的原因
- 职责不单一(设计需要符合“单一职责原则”)
- 字段未分组
极致
每个类不超过两个字段(正常人做不到,但这个是极致的追求)
谨记
把类写小,越小越好。
坏味道05:多参数
多个参数变化频率相同,封装成一个类
多个参数变化频率不同,静态的作为内部逻辑,动态的封装成多个类
参数中标记(flag)多,将函数拆分成多个函数
谨记
参数越少越好。
坏味道06:滥用控制语句
具体体现
- 嵌套的代码
- else语句
- 重复的switch
- 循环语句
规范
- 函数最多只有一层缩进
- 不要使用else关键字
重构
- 卫语句替换嵌套的代码
- 多态替换条件表达式
谨记
对于循环和选择语句,要慎重!!!
坏味道06:缺乏封装
过长的消息链(火车残骸)
基本类型偏执
重构方法
1. 隐藏委托关系
2. 以对象取代基本类型
谨记
构建模型,封装散落的代码
坏味道07:可变的数据
暴露的细节
可变的数据
全局数据
编程规则
- 限制变化
- 尽可能编写不变类
- 区分类的性质,实体对象要限制数据的变化。值对象要设计成不变类。
- 重构(移除设置函数)
谨记
限制可变的数据