《重构: 改善既有代码设计》关于代码的"坏味道"
对该书重构部分,“坏味道”的总结。随着 IDE 功能的完善与日益发展的AI,有些问题也有了更好的解决方法,后续进一步展示个人解读与思考
1. 神秘命名(Mysterious Name)
2. 重复代码(Duplicated Code)
3. 过长函数(Long Function)
4. 过长参数列表(Long Parameter List)
5. 全局数据(Global Data)
6. 可变数据(Mutable Data)
7. 发散式变化(Divergent Change)
8. 霰弹式修改(Shotgun Surgery)
9. 依恋情结(Feature Envy)
10. 数据泥团(Data Clumps)
11. 基本类型偏执(Primitive Obsession)
12. 重复的 switch(Repeated Switches)
13. 循环语句(Loops)
14. 冗赘的元素(Lazy Element)
15. 夸夸其谈通用性(Speculative Generality)
16. 临时字段(Temporary Field)
17. 过长的消息链(Message Chains)
18. 中间人(Middle Man)
19. 内幕交易(Insider Trading)
20. 过大的类(Large Class)
21. 异曲同工的类(Alternative Classes with Different Interfaces)
22. 纯数据类(Data Class)
23. 被拒绝的遗赠(Refused Bequest)
24. 注释(Comments)
对24个"坏味道"进行分类
一、表达与清晰度问题
- 神秘命名(Mysterious Name)
- 注释(Comments)
- 循环语句(Loops)
- 冗赘的元素(Lazy Element)
- 夸夸其谈通用性(Speculative Generality)
二、结构与规模问题
- 过长函数(Long Function)
- 过大的类(Large Class)
- 过长参数列表(Long Parameter List)
三、重复与分散问题
- 重复代码(Duplicated Code)
- 重复的 switch(Repeated Switches)
- 异曲同工的类(Alternative Classes with Different Interfaces)
- 霰弹式修改(Shotgun Surgery)
- 发散式变化(Divergent Change)
四、耦合与依赖 (模块间)
- 全局数据(Global Data)
- 可变数据(Mutable Data)
- 依恋情结(Feature Envy)
- 过长的消息链(Message Chains)
- 中间人(Middle Man)
- 内幕交易(Insider Trading)
- 被拒绝的遗赠(Refused Bequest)
五、数据组织问题
- 数据泥团(Data Clumps)
- 基本类型偏执(Primitive Obsession)
- 纯数据类(Data Class)
- 临时字段(Temporary Field)
除去1
外,其他4类可以归为设计边界上的不合理
规模问题 → “一个类/函数是不是太胖?”
重复问题 → “为什么到处都有类似的逻辑?”
耦合问题 → “为什么 A 和 B 粘在一起动不了?”
数据问题 → “为什么数据不像对象,更像裸变量?”
类别 | 关注点 | 边界失衡的方式 | 常见后果 |
---|---|---|---|
结构与规模问题 | 单体内部 | 太集中 → 过度膨胀 | 难读、难维护 |
重复与分散问题 | 单体之间 | 太分散 → 逻辑重复 | 修改代价高 |
耦合与依赖问题 | 模块关系 | 边界渗透 → 模块纠缠 | 难独立演进 |
数据组织问题 | 数据抽象 | 边界脆弱 → 数据贫血 | 缺乏封装,难演化 |