用途
本技能提供一套系统化的代码重构方法,目标是在保持功能不变的前提下,改善代码的可维护性、性能与清晰度。它适用于已有代码需要整理、优化或在新增功能前先降低复杂度的场景。
何时重构
资料列出以下触发时机:检测到代码坏味道(如重复代码、长函数等);在复杂区域添加新功能之前;理解加深后(“现在我看到更好的写法”);测试已就位时;需要性能优化时。
重构规则
- 没有测试绝不重构:若不存在测试,先写测试。
- 小步前进:一次只做一个改动。
- 每次改动后运行测试:确保没有破坏功能。
- 频繁提交:每个可工作的重构都是一次提交。
- 不要把重构与功能开发混在一起:关注点分离。
常见代码坏味道与重构手法
- 长方法/函数(超过 20-30 行):使用提取方法,将大函数拆分为带名字的小函数。
- 重复代码:提取函数/类,合并相同逻辑。
- 过长参数列表(4 个以上参数):使用参数对象,将多个参数封装为接口或对象。
- 过大的类:提取类,按职责拆分(如 UserService、EmailService、ReportService)。
- 依恋情结:方法使用另一个类的数据多于自身数据时,移动方法。
重构技术
- 提取方法:把大函数拆成更小、有命名的片段。
- 重命名以提高清晰度:使用描述性名称,并把魔法数字提取为常量(如 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(测试设计)配合使用。
重构反模式
不要:没有测试就重构;把重构与功能开发混在一起;一次性做大改动;重构你不理解的代码;跳过验证步骤。
应当:先写测试;将重构提交与功能提交分开;增量改动;重构前先理解代码;频繁运行测试。
限制
资料未提供该技能的具体安装方式、支持的编程语言版本、运行平台、收费或价格信息,暂未提供。