mcpField
R
refactoring-best-practices

refactoring-best-practices

github.com/luckys开发540 次安装2 周前更新
代码仓库

关于 refactoring-best-practices

面向需要安全修改现有代码的开发者,提供渐进式重构指导。强调先保护行为并建立反馈,再以小步处理真实痛点。

主要功能

  1. 01先观察并记录现有行为
  2. 02通过特征测试建立反馈
  3. 03隔离高风险依赖
  4. 04按职责逐步调整代码
  5. 05提供遗留代码迁移参考

适用场景

  1. 01在缺少测试的代码中开始重构
  2. 02将基础设施依赖隔离到边界
  3. 03逐步拆分大型服务
  4. 04迁移持久化表示或错误契约

安装

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

$npx skills add https://github.com/luckys/agent-skills --skill refactoring-best-practices

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

包含的文件

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

references/
characterization-tests.md
code-smells.md
compatibility-and-migration.md
domain-event-migration.md
error-contract-migration.md
fran-iglesias-refactoring-guidance.md
language-examples.md
legacy-code-techniques.md
refactoring-moves.md
safe-change-workflow.md
third-party-notices.md

详细介绍

重构最佳实践

当主要挑战是安全地修改现有代码时,请使用此技能。

工作方式

  1. 改进设计前,先保护现有行为。
  2. 优先采用小步、可逆的修改,避免大刀阔斧地重写。
  3. 先增加反馈,再增加抽象。
  4. 一次只修改一项职责。
  5. 根据当前的痛点决定下一步。

安全重构工作流

  1. 观察当前行为。

    • 找出输出、副作用和错误路径。
    • 明确哪些内容不得改变。
  2. 增加反馈。

    • 优先围绕可见行为编写特征测试。
    • 仅当测试不足时,才添加日志或临时探针。
  3. 找到接缝。

    • 隔离时间、文件系统、网络、框架全局变量、单例和外部 API。
    • 在风险依赖周围创建尽可能窄的边界。
  4. 选择下一步。

    • 提取方法
    • 提取类
    • 引入值对象
    • 引入一等集合
    • 移动方法
    • 用多态替换条件判断
    • 将构造与行为分离
    • 提取一个领域事件和一个次级订阅者
  5. 每完成一个有意义的步骤后,重新运行反馈机制。

高价值重构手法

  • 用值对象替换内聚的领域参数组;如果参数组没有共同的领域含义或不变量,则使用参数对象。
  • 将大型服务拆分为职责明确的协作对象。
  • 将业务规则从控制器、脚本和工具类中移出。
  • 用明确的角色替换类型代码和不稳定的条件判断。
  • 在端口或适配器后封装基础设施。
  • 如果不同的方法簇因不同原因而变化,则拆分类。

危险信号

  • 一次性大规模重写。
  • 尚未建立受保护的行为基线,就引入新抽象。
  • 将代码拆成许多小类,却没有让模型更清晰。
  • 仅为方便测试而引入继承。
  • 只凭审美进行重构,却忽视风险。

决策规则

适合立即重构的情况
  • 同一知识在多个位置重复
  • 代码正在阻碍实际变更
  • 下一个功能会加深耦合或重复
  • 当前结构容易引发缺陷
适合暂缓的情况
  • 还没有反馈循环
  • 痛点只是臆测
  • 抽象尚不稳定,不值得引入新类型
  • 变更范围很广,但对代码的理解仍然不足

参考资料

  • 修改调用方、删除旧路径或迁移持久化表示时,请阅读 references/compatibility-and-migration.md。

  • 关于基于接缝的重构指导、感知与分离,以及遗留代码变更算法,请阅读 references/safe-change-workflow.md。

  • 关于战术性重构手法,包括渐进式值对象迁移步骤,以及何时使用这些手法,请阅读 references/refactoring-moves.md。

  • 关于识别问题、将随时间共同变化作为设计依据,以及选择合适的重构手法,请阅读 references/code-smells.md。

  • 关于 Sprout、Wrap、Extract and Override 等适用于无测试环境的技术,请阅读 references/legacy-code-techniques.md。

  • 关于如何在重构未测试代码前编写测试,请阅读 references/characterization-tests.md。

  • 关于逐步将遗留副作用迁移到事件和订阅者、保留失败语义、实现可靠交接,以及将 CDC 作为迁移桥梁,请阅读 references/domain-event-migration.md。

  • 关于如何安全地替换 null、字符串和通用异常,同时保留失败时机、诊断信息、脱敏行为和公共契约,请阅读 references/error-contract-migration.md。

  • 关于从 Fran Iglesias 的实践中提炼出的重构启发式,请阅读 references/fran-iglesias-refactoring-guidance.md。

  • 关于多种语言的前后对照示例,请阅读 references/language-examples.md。

相关技能

  • 日常新代码决策请使用 oop-best-practices。
  • 主要问题是选择对象协作模式时,请使用 design-patterns-best-practices。
  • 移动不变量、拆分上帝聚合、引入根、变更一致性边界,或设计从旧版持久化中提取的领域 Repository 时,请使用 ddd-best-practices。
  • 移动或回填持久化数据时,请使用 data-migration-best-practices;此技能仅负责围绕该操作性迁移构建安全的代码接缝和兼容路径。

来源影响

此技能综合了以下资料中的重要理念:

评论

支持 Markdown