完整示例是什么
把坏味道与手法串成一次完整重构:起点是长函数加重复分支加深层嵌套,终点是卫语句、命名函数与多态分工。关键在于每一步都保持测试绿灯,提交历史可以逐步回溯,即使中途发现问题也能定位到具体哪一步引入的。
基本信息
| 起点坏味道 | 过长函数、重复的分支判断、嵌套条件 |
|---|---|
| 手法序列 | 提取函数 → 卫语句 → 以多态取代条件 |
| 验收标准 | 全量测试通过,行为对照一致 |
| 提交粒度 | 每个手法一次提交 |
| 前置动作 | 先用特征测试锁定现状行为 |
典型使用场景
- 团队练习重构手法时作为走查范例
- 评审中讨论要不要拆、拆到哪一步为止
- 迁移旧代码前先在紧耦合逻辑上验证手法
- 培训时对照坏味道与动作的对应关系
- 复盘时回看提交历史,定位哪一步引入问题
重构步骤
重构步骤
1. 补特征测试,锁定现状行为(含边界与异常)
2. 提取函数:把三段职责拆成命名阶段
3. 卫语句:边界提前返回,主干去掉嵌套
4. 以多态取代条件:按类型拆成实现类
5. 删除旧分支与临时函数,跑全量测试
# 每一步一次提交,绿灯后再进行下一步每步的动机与验收
| 步骤 | 主要动机 | 验收 |
|---|---|---|
| 锁定行为 | 让后续改动可回归 | 特征测试覆盖主要路径 |
| 提取函数 | 主干可读,阶段意图清楚 | 命名表达业务含义 |
| 卫语句 | 减少嵌套层级 | 主干缩进明显变浅 |
| 多态取代条件 | 新增类型不改调用方 | 旧分支删除且测试通过 |
提交粒度是小步回滚的前提:每一步只对应一个可解释的动机,评审与定位都更简单;混在一次提交里,红灯时无法判断是哪一步引入的。
跳过行为锁定直接改结构:边界行为在重构中悄悄变化,没有测试能告诉你;等线上出问题时,已经处在排查成本最高的场景。