mcpField
R
refactoring-surgeon

refactoring-surgeon

github.com/curiositech开发257248 次安装2 天前更新
代码仓库

关于 refactoring-surgeon

refactoring-surgeon 是面向开发者的代码重构技能,旨在改善代码结构而不改变行为。它强调以测试保障的小步修改,并涵盖常见代码异味、遗留系统迁移和验证。

主要功能

  1. 01提取与移动类重构指导
  2. 02简化和组织代码的技巧
  3. 03代码异味识别及处理方法
  4. 04遗留系统迁移模式
  5. 05检查覆盖率与复杂度的脚本

适用场景

  1. 01将冗长方法拆分为专注函数
  2. 02在保持行为不变时简化条件逻辑
  3. 03规划遗留代码的渐进式迁移

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/curiositech/some_claude_skills --skill refactoring-surgeon

安装后在 Claude Code 中输入/refactoring-surgeon确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CHANGELOG.md
.claude-plugin/
plugin.json
references/
replace-conditional-polymorphism.ts
strangler-fig-pattern.ts
extract-method.ts
introduce-parameter-object.ts
scripts/
validate-refactoring.sh

详细介绍

重构外科专家

专注于提升代码质量且不改变行为的代码重构专家。

快速入门

  1. 确保已有测试 - 没有安全网时绝不重构
  2. 识别代码异味 - 明确指出要处理的具体代码异味
  3. 小步修改 - 每次只做一项重构,并频繁提交
  4. 每次修改后运行测试 - 行为必须保持一致
  5. 不要添加功能 - 重构 ≠ 增强功能
  6. 记录重要修改 - 向未来的维护者说明“原因”

核心能力

类别技术
提取提取方法、提取类、提取接口
移动移动方法、移动字段、内联方法
简化用多态替换条件语句、分解条件语句
组织引入参数对象、替换魔法数字
旧系统迁移绞杀者无花果模式、按抽象分支、并行变更

代码异味参考

膨胀型
┌─────────────────────┐    ┌─────────────────────┐    ┌─────────────────────┐
│    Long Method      │    │    Large Class      │    │   Long Parameter    │
│  > 20 lines?        │    │  > 200 lines?       │    │       List          │
│  → Extract Method   │    │  → Extract Class    │    │  → Parameter Object │
└─────────────────────┘    └─────────────────────┘    └─────────────────────┘
面向对象滥用
┌─────────────────────┐    ┌─────────────────────┐    ┌─────────────────────┐
│  Switch Statements  │    │   Refused Bequest   │    │   Parallel          │
│  Type-checking?     │    │  Unused inheritance?│    │   Hierarchies       │
│  → Polymorphism     │    │  → Delegation       │    │  → Move Method      │
└─────────────────────┘    └─────────────────────┘    └─────────────────────┘
变更阻碍因素
┌─────────────────────┐    ┌─────────────────────┐
│  Divergent Change   │    │  Shotgun Surgery    │
│  One class, many    │    │  One change, many   │
│  reasons to change? │    │  classes affected?  │
│  → Extract Class    │    │  → Move/Inline      │
└─────────────────────┘    └─────────────────────┘

参考示例

./references/ 中的完整重构示例:

文件模式用例
extract-method.ts提取方法冗长方法 → 职责明确的函数
replace-conditional-polymorphism.ts替换条件语句switch/if → 多态类
introduce-parameter-object.ts参数对象过多参数 → 结构化对象
strangler-fig-pattern.ts绞杀者无花果模式旧代码 → 渐进式迁移

反模式(10 个关键错误)

1. 大爆炸式重构

症状:一次大规模修改重写整个模块 解决方法:采用绞杀者无花果模式,通过测试进行小步渐进式修改

2. 未经测试就重构

症状:在没有测试覆盖的情况下更改代码结构 解决方法:先编写特征测试,并为受影响的部分补充测试覆盖

3. 过早抽象

症状:为了“未来的灵活性”而创建通用框架 解决方法:抽象前先等待三个具体示例(三次法则)

4. 未借助 IDE 支持就重命名

症状:查找并替换时遗漏某些出现位置 解决方法:使用 IDE 重构工具,并先搜索用法

5. 将重构与功能开发混在一起

症状:重组代码的同时添加新功能 解决方法:分开提交——先重构,再添加功能

6. 忽视代码审查

症状:重构 PR 规模太大,难以审查 解决方法:提交小而专注的 PR,并附上清晰的提交说明

7. 过度抽象

症状:简单操作却经过三层抽象 解决方法:遵循 YAGNI 原则——从具体实现开始,出现模式后再抽象

8. 重构不完整

症状:开始提取方法,却留下部分重复代码 解决方法:完成重构或撤销——不要半途而废

9. 事故期间重构生产代码

症状:“我顺便清理一下这里……” 解决方法:事故期间绝不重构——修复错误,并创建任务单

10. 不衡量改进效果

症状:不知道是否有帮助就进行重构 解决方法:跟踪复杂度、测试覆盖率、构建时间等指标

安全检查清单

重构前:

  • 代码可成功编译/运行
  • 所有测试均通过
  • 重构区域的测试覆盖率足够
  • 提交当前状态(以便回滚)

重构期间:

  • 进行小步、渐进式修改
  • 每次修改后运行测试
  • 保持行为一致
  • 重构时不要添加功能

重构后:

  • 所有测试仍然通过
  • 没有新增警告/错误
  • 代码更易读
  • 复杂度指标有所改善
  • 记录重要修改

质量检查清单

  • 行为未发生变化(测试可证明这一点)
  • 可读性更好
  • 复杂度降低(圈复杂度、认知复杂度)
  • 更符合 SOLID 原则
  • 消除重复(DRY)
  • 代码更易于测试
  • 命名清晰
  • 抽象恰当(不过度设计)

验证脚本

运行 ./scripts/validate-refactoring.sh 以检查:

  • 测试覆盖是否存在
  • 代码异味指标
  • 重复模式
  • 复杂度指标
  • SOLID 违规情况
  • 重构安全性(git、未提交的更改)

外部资源

评论

支持 Markdown