臆想泛化
概述
臆想泛化是可舍弃类代码异味的一种,指为未来可能的需求而添加当前不需要的抽象或功能,违反了YAGNI(You Aren't Gonna Need It)原则。
关键内容
- 特征识别:
- 只有一个子类的抽象类
- 为"未来可能需要"而添加的未使用参数
- 只是转发调用的函数
- 为单一用例设计的"框架"
-
为了灵活性而添加的复杂抽象
-
负面影响:
- 复杂度没有带来相应收益
- 违背YAGNI原则
- 代码更难理解和维护
- 增加了不必要的复杂性
-
使真正的业务逻辑模糊化
-
常见表现:
- 预先设计的继承层次,但实际只有一个实现
- 包含多个未使用的参数的方法
- 复杂的配置选项,但只有一两种实际使用
-
通用化的接口,但只有一个实现者
-
重构策略:
- Collapse Hierarchy:折叠继承层次
- Inline Class:内联不必要的类
- Remove Parameter:移除未使用的参数
-
Rename Method:简化过度通用的命名
-
设计原则:
- 遵循YAGNI原则
- 优先实现当前需求
- 在真正需要时再进行抽象
来源
- Martin Fowler — 《重构:改善既有代码的设计》
- 代码异味 — 重构指导书