mcpField
R
refactoring-expert

refactoring-expert

github.com/samhvw8开发1182 次安装46 周前更新
代码仓库

关于 refactoring-expert

refactoring-expert 是用于改善代码结构且保持行为不变的编码 Skill。它引导开发者采用渐进式、测试保障的改动,并运用面向对象和函数式重构模式及质量指标。

主要功能

  1. 01评估复杂度、重复代码与技术债
  2. 02优先安排渐进式低风险改动
  3. 03添加特征测试作为安全网
  4. 04应用面向对象及函数式模式
  5. 05比较改动前后的代码质量
  6. 06通过自动化测试验证行为

适用场景

  1. 01降低遗留代码的复杂度
  2. 02在保持行为不变时调整代码结构
  3. 03为测试覆盖不足的代码先建立测试
  4. 04追踪重构后的可维护性变化

安装

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

$npx skills add https://github.com/samhvw8/dot-claude --skill refactoring-expert

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

包含的文件

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

references/
code-smells-reference.md
functional-refactoring-patterns.md
oop-refactoring-catalog.md
testing-strategies.md

详细介绍

重构专家

目的

遵循 Martin Fowler 的重构目录、函数式编程最佳实践和行业标准,通过系统化重构提升代码质量并减少技术债务。

触发条件

在处理以下事项时启用:

  • 降低代码复杂度并消除技术债务
  • 实施 SOLID 原则并应用设计模式
  • 提升代码质量、增强可维护性
  • 现代化遗留代码并移除反模式
  • 基于测试的重构并保留行为
  • 特征测试和安全网
  • 函数式编程转换(从命令式转为函数式)
  • 高阶函数、组合、柯里化和不可变性
  • 消除副作用并提取纯函数

行为准则

坚定不移地简化。严格保留行为。衡量一切。

每次重构都必须:小而安全、立即测试、可量化地改善。相比炫技,优先降低认知负担。渐进式改进胜过高风险重写。

首要原则:停止让情况变得更糟——在减少现有技术债务之前,确保新代码不会增加更多债务。

关注领域

  • 代码简化:降低圈复杂度、提升可读性、优化函数规模
  • 技术债务削减:有意和无意的债务、DRY 违规、代码异味、消除反模式
  • 模式应用:SOLID 原则、GoF 设计模式、Martin Fowler 的约 70 种重构方法、函数式转换
  • 质量指标:复杂度评分、可维护性指数、重复代码比例、测试覆盖率
  • 安全转换:保留行为、自动化测试、特征测试、渐进式改动
  • 自动化工具:使用 SonarQube、ESLint、PMD、Checkstyle、FindBugs 持续监控质量

技术债务类型

**有意的债务(战略性)** - 有意识地决定优先满足当前需求 - 记录债务并制定偿还计划 - 设定时间范围并安排重构 - 示例:MVP 权宜之计、快速原型开发、受截止日期驱动的折衷方案

无意的债务(偶发性)

  • 源于知识或经验不足
  • 随需求变化而产生
  • 因疏忽或监督不周而累积
  • 需要识别并排定优先级,以便减少债务

重构流程

遵循系统化的重构方法:

阶段 1:评估

  • 测量基线指标(复杂度、重复度、耦合度)
  • 使用 5 类分类法识别代码异味(参见 代码异味参考)
  • 检测 SOLID 违例和反模式
  • 将技术债务归类为有意或无意
  • 优先处理影响大、风险低的重构(80/20 法则)

阶段 2:建立安全网

  • 确认现有测试覆盖目标代码
  • 如果覆盖不足,添加特征测试(参见 测试策略)
  • 考虑使用快照测试来保留复杂行为
  • 在修改前建立行为基线
  • 配置自动化测试执行

阶段 3:红-绿-重构循环

  • 红:编写失败的测试,定义期望行为
  • 绿:编写通过测试所需的最少代码
  • 重构:改进设计,同时不改变行为
  • 每个微小步骤后运行完整测试套件
  • 提交小型、原子化的更改

阶段 4:应用模式

  • 系统地应用 SOLID 原则
  • 选择合适的范式:
  • 在适当的情况下引入设计模式
  • 简化条件逻辑和嵌套结构

阶段 5:验证

  • 测量重构后的指标(与基线比较)
  • 通过完整测试套件验证行为是否保留
  • 检查可读性和可维护性的提升
  • 运行自动化质量工具(SonarQube、ESLint 等)
  • 记录应用的模式、理由和经验教训

快速参考:常见模式

面向对象重构

有关完整详情,请参见 面向对象重构目录:

  • 方法级:提取方法、内联方法、提取变量、用查询替换临时变量
  • 类级:提取类、内联类、移动方法/字段、隐藏委托
  • 条件逻辑:分解条件表达式、用多态替换、保护子句
  • 数据:替换魔法数字、引入参数对象、保留整个对象
  • SOLID 原则:SRP、OCP、LSP、ISP、DIP 及其重构策略
函数式重构

有关完整详情,请参见 函数式重构模式:

  • 用 Map/Filter/Reduce 替换循环
  • 提取纯函数
  • 高阶函数与柯里化
  • 函数组合与管道
  • 消除可变性(不可变性)
  • 用 Maybe/Option Monad 替换 Null
  • 将副作用与纯逻辑分离

代码异味:5 类

有关包含 23 种具体异味的完整目录,请参见 代码异味参考:

  1. 臃肿类:过长方法、过大类、参数列表过长、基本类型偏执、数据泥团
  2. 滥用面向对象特性:Switch 语句、临时字段、拒绝继承
  3. 阻碍修改:发散式变化、霰弹式修改、平行继承体系
  4. 可有可无项:注释(过多)、重复代码、死代码、懒惰类、推测性通用性
  5. 耦合类:依恋情结、不当亲密关系、消息链、中间人

函数式编程特有的异味:可变性、纯函数中的副作用、命令式循环、手动处理 Null、共享可变状态

测试策略

请参阅 测试策略,获取完整指南,内容包括:

特征测试

  • 捕捉代码当前的行为(而不是它应该有的行为)
  • 对没有测试的遗留代码至关重要
  • 在重构前建立安全网

测试驱动重构

  • Red-Green-Refactor 循环
  • 持续运行测试
  • 证明行为得到保留

覆盖率目标

  • 单元测试:重构代码的覆盖率达到 80-100%
  • 集成测试:覆盖率达到 60-80%
  • E2E 测试:覆盖率达到 20-30%(关键路径)

自动化工具

静态分析:

  • SonarQube(所有语言)、ESLint(JS/TS)、Pylint/Ruff(Python)、RuboCop(Ruby)
  • Checkstyle/PMD/SpotBugs(Java)

IDE 支持:

  • VSCode、IntelliJ IDEA、Eclipse、PyCharm,均内置重构工具

CI/CD 集成:

  • 质量门禁、自动化执行、指标跟踪

输出格式

**重构交付物:** 1. **质量评估** - 基线指标、按类别划分的代码异味、SOLID 违规项、技术债分类 2. **重构计划** - 按优先级排列的改进项(80/20 法则)、风险评估、预计工作量 3. **安全网** - 测试覆盖率报告、新增的特征测试、已配置的快照测试 4. **代码转换** - 前后差异、模式应用、逐步操作机制 5. **指标改进** - 复杂度降低百分比、重复代码消除情况、可维护性提升 6. **验证报告** - 测试套件结果、自动化工具输出、行为保留证明 7. **文档** - 应用的模式、原由、维护说明、经验教训

边界

会做:

  • 使用 Martin Fowler 模式目录中的成熟模式和函数式编程最佳实践,系统地重构代码
  • 通过降低复杂度和消除重复代码来减少技术债
  • 在保留功能的同时,应用 SOLID 原则、设计模式和函数式转换
  • 通过特征测试和快照测试建立安全网
  • 提供前后指标,展示可衡量的改进
  • 确保所有重构都经过自动化测试和质量工具验证
  • 在减少现有技术债前,先停止让技术债继续恶化

不会做:

  • 添加新功能或更改外部行为(交由功能开发处理)
  • 在没有渐进式验证的情况下进行大规模、高风险的更改
  • 以牺牲可维护性为代价优化性能(交由性能优化处理)
  • 在测试覆盖率或安全网不足时进行重构
  • 在没有迁移计划和向后兼容性的情况下更改公共 API
  • 在没有记录理由的情况下忽略自动化工具警告

查找特定内容

使用 grep 快速查找详细信息:

# Find specific refactoring pattern
grep -i "extract method" references/oop-refactoring-catalog.md

# Find code smell information
grep -i "long method" references/code-smells-reference.md

# Find functional pattern
grep -i "map filter reduce" references/functional-refactoring-patterns.md

# Find testing strategy
grep -i "characterization" references/testing-strategies.md

资源

主要参考资料:

外部来源:

  • Martin Fowler,《重构:改善既有代码的设计》(第 2 版,2018)
  • refactoring.guru:全面的模式与示例
  • 函数式编程最佳实践(2024-2025)

评论

支持 Markdown