重构案例模板

要点

  • 重构案例记录代码重构的动机、策略、测试覆盖
  • 重点是不改变外部行为的前提下改善内部结构
  • 重构必须有测试保障——没有测试的重构是赌博
  • 渐进式重构 vs 大规模重写——写清楚选择的理由

1. 适用场景

重构案例用于记录代码结构改善的过程。

典型场景:

  • 消除重复代码
  • 拆分大函数/大类
  • 改善模块边界
  • 引入新的设计模式
  • 升级技术栈(不改变功能)

2. 模板结构

# [重构标题]
 
## 背景
 
什么代码、什么问题、为什么要重构。
 
## 问题描述
 
- 代码异味:大函数(500 行)、重复代码、循环依赖
- 影响:难以维护、难以测试、新人上手慢
- 触发原因:要加新功能,发现改不动
 
## 重构策略
 
### 策略选择
 
选择了「渐进式重构」,而不是「大规模重写」。
 
理由:
- 大规模重写风险太高,需要停机
- 渐进式重构可以逐步验证,随时回滚
- 团队没有大规模重写的经验
 
### 重构步骤
 
#### 步骤 1:添加测试(第 1-2 天)
 
- 给现有功能添加单元测试
- 覆盖率从 20% 提升到 60%
- 确保重构不会破坏功能
 
#### 步骤 2:提取函数(第 3-5 天)
 
- 把 500 行的大函数拆成 10 个小函数
- 每个小函数 < 50 行
- 保持外部接口不变
 
#### 步骤 3:消除重复(第 6-7 天)
 
- 找到 3 处重复代码
- 提取为公共函数
- 用测试验证行为一致
 
#### 步骤 4:改善模块边界(第 8-10 天)
 
- 把循环依赖改为单向依赖
- 引入接口层解耦
- 更新测试
 
## 测试策略
 
- 重构前先添加测试,覆盖率 > 60%
- 每个步骤完成后运行测试
- 发现测试失败立即回滚
 
## 结果
 
重构耗时 2 周,按计划完成:
 
- 代码行数:500 行 → 10 个函数,每个 < 50 行
- 重复代码:3 处 → 0 处
- 测试覆盖率:20% → 75%
- 新人上手时间:3 天 → 1 天
 
## 复盘
 
- 测试先行是正确的,重构过程中发现了 2 个隐藏 bug
- 渐进式重构风险可控,但耗时比预期长
- 重构后代码可读性明显提升,新功能开发速度加快
- 后续行动:建立代码异味检查清单,定期审查

3. 写作要点

重构动机要清楚

不要写「代码太乱了所以要重构」。要写:

  • 具体的代码异味(大函数、重复代码、循环依赖)
  • 对开发效率的影响(新功能开发慢、bug 多)
  • 触发原因(要加新功能,发现改不动)

测试保障是前提

没有测试的重构是赌博。要写清楚:

  • 重构前的测试覆盖率
  • 重构过程中添加的测试
  • 测试失败时的回滚策略

渐进式 vs 大规模重写

两种策略都有适用场景:

  • 渐进式重构:风险低,可以随时回滚,但耗时长
  • 大规模重写:一次到位,但风险高,需要停机

写清楚为什么选择某个策略。

重构手法要具体

不要写「改善了代码结构」。要写:

  • 提取函数(500 行 → 10 个 < 50 行的函数)
  • 消除重复(3 处 → 0 处)
  • 引入设计模式(策略模式替代 if-else)

4. 常见误区

没有测试就重构

「我相信不会改坏」不是测试保障。重构前必须有测试,覆盖率 > 60%。

重构范围太大

「重构整个订单模块」范围太大。要拆分:先重构订单创建,再重构订单查询。

重构时加新功能

重构和加功能混在一起,出了问题不知道是重构引入的还是功能引入的。重构只做重构,不加功能。

总结

重构案例的核心是动机、测试保障、渐进策略。写清楚代码异味、测试覆盖率、重构步骤(提取函数、消除重复、改善边界)。渐进式重构风险可控,测试先行是前提。