坏味道与重构手法速查表
坏味道(中文) | 常用重构 |
---|---|
异曲同工的类 | 改变函数声明(124),搬移函数(198),提炼超类(375) |
注释 | 提炼函数(106),改变函数声明(124),引入断言(302) |
纯数据类 | 封装记录(162),移除设值函数(331),搬移函数(198),提炼函数(106),拆分阶段(154) |
数据泥团 | 提炼类(182),引入参数对象(140),保持对象完整(319) |
发散式变化 | 拆分阶段(154),搬移函数(198),提炼函数(106),提炼类(182) |
重复代码 | 提炼函数(106),移动语句(223),函数上移(350) |
依恋情结 | 搬移函数(198),提炼函数(106) |
全局数据 | 封装变量(132) |
内幕交易 | 搬移函数(198),搬移字段(207),隐藏委托关系(189),以委 托取代子类(381),以委托取代超类(399) |
过大的类 | 提炼类(182),提炼超类(375),以子类取代类型码(362) |
冗赘的元素 | 内联函数(115),内联类(186),折叠继承体系(380) |
过长函数 | 提炼函数(106),以查询取代临时变量(178),引入参数对象 (140),保持对象完整(319),以命令取代函数(337),分解条 件表达式(260),以多态取代条件表达式(272),拆分循环 (227) |
过长参数列 | 以查询取代参数(324),保持对象完整(319),引入参数对象 (140),移除标记参数(314),函数组合成类(144) |
循环语句 | 以管道取代循环(231) |
过长的消息链 | 隐藏委托关系(189),提炼函数(106),搬移函数(198) |
中间人 | 移除中间人(192),内联函数(115),以委托取代超类(399), 以委托取代子类(381) |
可变数据 | 封装变量(132),拆分变量(240),移动语句(223),提炼函数 (106),将查询函数和修改函数分离(306),移除设值函数 (331),以查询取代派生变量(248),函数组合成类(144),函数组合成变换(149),将引用对象改为值对象(252) |
神秘命名 | 改变函数声明(124),变量改名(137),字段改名(244) |
基本类型偏执 | 以对象取代基本类型(174),以子类取代类型码(362),以多态取 代条件表达式(272),提炼类(182),引入参数对象(140) |
被拒绝的遗赠 | 函数下移(359),字段下移(361),以委托取代子类(381),以 委托取代超类(399) |
重复的switch | 以多态取代条件表达式(272) |
霰弹式修改 | 搬移函数(198),搬移字段(207),函数组合成类(144),函数 组合成变换(149),拆分阶段(154),内联函数(115),内联类 (186) |
夸夸其谈通用性 | 折叠继承体系(380),内联函数(115),内联类(186),改变函 数声明(124),移除死代码(237) |
临时字段 | 提炼类(182),搬移函数(198),引入特例(289) |
第一组重构
- 提炼函数
- 内联函数
- 提炼变量
- 内联变量
- 改变函数声明
- 封装变量
- 变量改名
- 引入参数对象
- 函数组合成类
- 函数组合成变换
- 拆分阶段
封装
- 封装记录
- 封装集合
- 以对象取代基本类型
- 以查询取代临时变量
- 提炼类
- 内联类
- 隐藏委托关系
- 移除中间人
- 替换算法
搬移特性
- 搬移函数
- 搬移字段
- 搬移语句到函数
- 搬移语句到调用者
- 以函数调用取代内联代码
- 移动语句
- 拆分循环
- 以管道取代循环
- 移除死代码
重新组织数据
- 拆分变量
- 字段改名
- 以查询取代派生变量
- 将引用对象改为值对象
- 将值对象改为引用对象
简化条件逻辑
- 分解条件表达式
- 合并条件表达式
- 以卫语句取代嵌套条件式
- 以多态取代条件表达式
- 引入特例
- 引入断言
重构API
- 将查询函数和修改函数分离
- 函数参数化
- 移除标记参数
- 保持对象完整
- 以查询取代参数
- 以参数取代查询
- 移除设值函数
- 以工厂函数取代构造函数
- 以命令取代函数
- 以函数取代命令
处理继承关系
- 函数上移
- 字段上移
- 构造函数本体上移
- 函数下移
- 字段下移
- 以子类取代类型码
- 移除子类
- 提炼超类
- 折叠继承体系
- 以委托取代子类
- 以委托取代超类