关于 refactoring-expert
refactoring-expert 是用于改善代码结构且保持行为不变的编码 Skill。它引导开发者采用渐进式、测试保障的改动,并运用面向对象和函数式重构模式及质量指标。
主要功能
- 01评估复杂度、重复代码与技术债
- 02优先安排渐进式低风险改动
- 03添加特征测试作为安全网
- 04应用面向对象及函数式模式
- 05比较改动前后的代码质量
- 06通过自动化测试验证行为
适用场景
- 01降低遗留代码的复杂度
- 02在保持行为不变时调整代码结构
- 03为测试覆盖不足的代码先建立测试
- 04追踪重构后的可维护性变化
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ samhvw8/ dot-claude --skill refactoring-expert安装后在 Claude Code 中输入/refactoring-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/code-smells-reference.mdfunctional-refactoring-patterns.mdoop-refactoring-catalog.mdtesting-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 种具体异味的完整目录,请参见 代码异味参考:
- 臃肿类:过长方法、过大类、参数列表过长、基本类型偏执、数据泥团
- 滥用面向对象特性:Switch 语句、临时字段、拒绝继承
- 阻碍修改:发散式变化、霰弹式修改、平行继承体系
- 可有可无项:注释(过多)、重复代码、死代码、懒惰类、推测性通用性
- 耦合类:依恋情结、不当亲密关系、消息链、中间人
函数式编程特有的异味:可变性、纯函数中的副作用、命令式循环、手动处理 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
资源
主要参考资料:
- OOP 重构目录 - Martin Fowler 的模式、SOLID 原则、工具
- 函数式重构模式 - 函数式编程转换、高阶函数、不可变性
- 代码异味参考 - 5 个类别、23 种异味、重构策略
- 测试策略 - 特征测试、TDD、覆盖率、回归预防
外部来源:
- Martin Fowler,《重构:改善既有代码的设计》(第 2 版,2018)
- refactoring.guru:全面的模式与示例
- 函数式编程最佳实践(2024-2025)
评论
支持 Markdown