基于 Martin Fowler 方法论的系统化代码重构 skill。适用于用户请求重构代码、改进代码结构、减少技术债、清理旧代码、消除 code smell 或提升可维护性时。这个 skill 采用分阶段、带研究与计划的安全增量实施方式。
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-refactor-7242ddcdd697 ,按照其中的说明把「refactor」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
这是一个基于 Martin Fowler《Refactoring: Improving the Design of Existing Code》(第 2 版)的系统化代码重构方法。这个 skill 强调安全、渐进的修改,并由测试提供保障。
“重构是在不改变软件外部行为的前提下,改进其内部结构的过程。” — Martin Fowler
阶段 1:研究与分析
↓
阶段 2:测试覆盖评估
↓
阶段 3:识别代码异味
↓
阶段 4:创建重构计划
↓
阶段 5:增量实施
↓
阶段 6:评审与迭代
开始前先确认:
向用户汇报:
“没有测试的重构,就像没有安全带就开车。” — Martin Fowler
测试是安全重构的关键前提。没有测试,很容易引入 bug。
检查现有测试
# 查找测试文件
find . -name "*test*" -o -name "*spec*" | head -20
运行现有测试
# JavaScript / TypeScript
npm test
# Python
pytest -v
# Java
mvn test
检查覆盖率(如果可用)
# JavaScript
npm run test:coverage
# Python
pytest --cov=.
如果测试存在且通过:
如果测试缺失或不完整: 给出选项:
如果测试失败:
对每个要重构的函数,测试应覆盖:
使用“红-绿-重构”循环:
代码深层问题的表面症状。它们不一定是 bug,但说明代码设计可能有问题。
完整目录见 references/code-smells.md。
| 异味 | 迹象 | 影响 |
|---|---|---|
| 长函数 | 函数超过 30-50 行 | 难以理解、测试和维护 |
| 重复代码 | 多处出现相同逻辑 | 修复需要改多处 |
| 大类 | 类承担了太多职责 | 违反单一职责原则 |
| Feature Envy | 一个方法更多依赖别的类的数据 | 封装性差 |
| 基础类型沉迷 | 过度使用基础类型而不是对象 | 缺少领域概念 |
| 长参数列表 | 方法参数超过 4 个 | 调用困难 |
| 数据泥团 | 一组数据总是一起出现 | 缺少抽象 |
| switch 语句 | 复杂的 switch / if-else 链 | 难以扩展 |
| 臆想泛化 | “以防未来需要”提前设计 | 不必要的复杂度 |
| 死代码 | 未使用的代码 | 造成困惑和维护负担 |
自动分析(如果有脚本)
python scripts/detect-smells.py <file>
人工审查
优先级排序 优先关注会:
向用户呈现:
针对每个异味,从目录中选择合适的重构手法。
完整列表见 references/refactoring-catalog.md。
| 代码异味 | 推荐重构 |
|---|---|
| 长函数 | Extract Method、Replace Temp with Query |
| 重复代码 | Extract Method、Pull Up Method、Form Template Method |
| 大类 | Extract Class、Extract Subclass |
| Feature Envy | Move Method、Move Field |
| 基础类型沉迷 | Replace Primitive with Object、Replace Type Code with Class |
| 长参数列表 | Introduce Parameter Object、Preserve Whole Object |
| 数据泥团 | Extract Class、Introduce Parameter Object |
| switch 语句 | Replace Conditional with Polymorphism |
| 臆想泛化 | Collapse Hierarchy、Inline Class、Remove Dead Code |
| 死代码 | Remove Dead Code |
使用 templates/refactoring-plan.md 里的模板。
每项重构都要写明:
关键:重构必须分阶段推进。
阶段 A:快速收益(低风险,高价值)
阶段 B:结构改进(中风险)
阶段 C:架构改动(高风险)
在开始实施前:
“修改 → 测试 → 通过?→ 提交 → 下一步”
对每一步重构:
预检查
只做一个小改动
验证
如果测试通过(绿色)
如果测试失败(红色)
每次提交都应当:
示例提交信息:
refactor: 从 processOrder() 中提取 calculateTotal()
refactor: 将 'x' 重命名为 'customerCount' 以提升清晰度
refactor: 删除未使用的 validateOldFormat() 方法
每个子阶段完成后,向用户汇报:
重构前后运行复杂度分析:
python scripts/analyze-complexity.py <file>
展示改进:
向用户展示最终结果:
和用户讨论:
遇到以下情况时,务必暂停并和用户确认:
重构前:
function processOrder(order) {
// 150 行代码,包含:
// - 重复验证逻辑
// - 内联计算
// - 多种职责混杂
}
重构步骤:
processOrder()validateOrder()calculateOrderTotal()notifyCustomer()processOrder() 现在只负责串联 3 个清晰函数重构后:
function processOrder(order) {
validateOrder(order);
const total = calculateOrderTotal(order);
notifyCustomer(order, total);
return { order, total };
}
scripts/analyze-complexity.py - 分析代码复杂度指标scripts/detect-smells.py - 自动检测 code smell