SuperAPI AI 工具集

code-refactoring-patterns

编程与开发

查看项目

更新于 10-15 11:42

技能介绍

用途

本技能提供一套系统化的代码重构方法,目标是在保持功能不变的前提下,改善代码的可维护性、性能与清晰度。它适用于已有代码需要整理、优化或在新增功能前先降低复杂度的场景。

何时重构

资料列出以下触发时机:检测到代码坏味道(如重复代码、长函数等);在复杂区域添加新功能之前;理解加深后(“现在我看到更好的写法”);测试已就位时;需要性能优化时。

重构规则

  • 没有测试绝不重构:若不存在测试,先写测试。
  • 小步前进:一次只做一个改动。
  • 每次改动后运行测试:确保没有破坏功能。
  • 频繁提交:每个可工作的重构都是一次提交。
  • 不要把重构与功能开发混在一起:关注点分离。

常见代码坏味道与重构手法

  1. 长方法/函数(超过 20-30 行):使用提取方法,将大函数拆分为带名字的小函数。
  2. 重复代码:提取函数/类,合并相同逻辑。
  3. 过长参数列表(4 个以上参数):使用参数对象,将多个参数封装为接口或对象。
  4. 过大的类:提取类,按职责拆分(如 UserService、EmailService、ReportService)。
  5. 依恋情结:方法使用另一个类的数据多于自身数据时,移动方法。

重构技术

  • 提取方法:把大函数拆成更小、有命名的片段。
  • 重命名以提高清晰度:使用描述性名称,并把魔法数字提取为常量(如 TAX_RATE)。
  • 引入解释性变量:把复杂表达式拆成有含义的布尔变量或中间变量。
  • 用多态替换条件判断:用接口/继承替代 switch/if-else 链。
  • 简化条件逻辑:使用提前返回和卫语句,先校验再执行主逻辑。

重构工作流程

资料给出如下步骤(含示例命令,代码内容保持不变):

第 1 步:理解现有代码 —— cat src/feature.ts、cat src/feature.test.ts、grep -r "functionName" src/。

第 2 步:确保测试存在 —— npm test src/feature.test.ts,必要时补充缺失测试。

第 3 步:小步重构 —— 做一个重构改动后运行 npm test,测试通过则 git add . && git commit -m "refactor: extract method calculateTotal",然后对下一处重构重复。

第 4 步:验证无回归 —— npm test、npx tsc --noEmit、npm run lint。

第 5 步:性能检查 —— 对性能关键代码,比较前后,npm run benchmark。

重构检查清单

重构前:测试存在且通过;理解当前行为;清楚为什么需要重构;有足够时间完成重构。

重构中:一次只做一个改动;每次改动后运行测试;保持提交小而聚焦;重构期间不添加功能。

重构后:所有测试通过;无类型错误;lint 通过;完成代码评审;必要时更新文档。

与其他技能的配合

资料说明本技能可与 verification-loop(重构后验证)、tdd-workflow(测试优先方法)、coding-standards-enforcer(风格一致性)、testing-patterns(测试设计)配合使用。

重构反模式

不要:没有测试就重构;把重构与功能开发混在一起;一次性做大改动;重构你不理解的代码;跳过验证步骤。

应当:先写测试;将重构提交与功能提交分开;增量改动;重构前先理解代码;频繁运行测试。

限制

资料未提供该技能的具体安装方式、支持的编程语言版本、运行平台、收费或价格信息,暂未提供。