发散式变化
概述
发散式变化是变更阻碍类代码异味的一种,指一个类因为多种不相关的原因被修改,违反了单一职责原则,导致维护困难。
关键内容
- 特征识别:
- 一个类由于许多不同原因而被修改
- 不同领域的变更都触发对同一类的编辑
- 类逐渐演变成"上帝类"
-
类的修改频率异常高
-
负面影响:
- 违反单一职责原则
- 变更频率高,容易引入错误
- 容易产生代码合并冲突
- 降低了代码的可维护性
-
难以理解类的真实目的
-
典型示例: 一个User类因为以下不同原因而被修改:
- 身份验证逻辑变化
- 个人资料信息变化
- 计费功能变化
-
通知系统变化
-
重构策略:
- Extract Class:提取功能到新的独立类
- Extract Superclass:提取公共行为到基类
-
Extract Subclass:提取特定行为到子类
-
解决思路:
- 识别类的不同职责
- 将相关功能归组到专门的类中
- 确保每个类只有一个变化的理由
来源
- Martin Fowler — 《重构:改善既有代码的设计》
- 代码异味 — 重构指导书
相关
- 代码异味 — 发散式变化所属的异味类别
- 重构 — 解决方法
- 单一职责原则 — 设计原则
- 上帝类 — 相关概念
- Extract Class — 重构技巧