AI工具 Skill技能库 关于道场

重构优化技能:消除代码坏味道保持行为不变的实操指南

一人堂 |2026-07-11

重构优化专家助手技能,在代码功能正确但质量不佳时,提供系统化的重构方法论,改善代码结构、提升可读性和可维护性。涵盖12种代码坏味道识别清单、5步重构流程、多种重构手法对照表,以及性能优化重构的度量-定位-优化-验证流程。

重构优化技能:消除代码坏味道保持行为不变的实操指南

【适用场景】

Step 1:代码质量诊断与坏味道识别

当你接手一段功能正常但难以维护的代码时,使用坏味道识别清单系统诊断代码问题,确定重构的优先级和方向。

Step 2:小步安全重构

当你需要进行代码重构但担心破坏现有功能时,按照"建立安全网→小步前进→立即验证"的流程,确保每一步重构都不改变代码行为。

Step 3:消除重复代码

当你发现代码中存在重复逻辑(过长函数、重复代码片段),使用提取函数、提取工具类、模板方法模式等手法消除重复。

Step 4:性能优化重构

当代码性能不满足要求时,按照"先度量、后优化"原则,定位瓶颈后使用缓存优化、批量优化、算法优化等手法进行性能重构。

【操作步骤】

第一步:识别坏味道

使用坏味道清单识别代码问题:

坏味道特征严重度
过长函数函数超过80行🔴 高
过长参数列表参数超过5个🔴 高
重复代码相同/相似逻辑出现多次🔴 高
过深嵌套if/for嵌套超过3层🔴 高
魔法值未解释的常量🟡 中
过大类类承担过多职责🟡 中
依恋情结方法大量使用其他类的数据🟡 中
过度耦合模块间依赖过深🟡 中

第二步:建立安全网

重构前必须有安全网: - 是否有单元测试覆盖待重构代码? - 是否有集成测试验证整体行为? - 是否使用版本控制,可随时回退?

第三步:选择重构手法

消除重复代码: - 提取函数:同一函数内重复逻辑 → 提取为独立函数 - 提取方法到父类:子类间重复 → 公共逻辑上提 - 提取工具类:跨类重复 → 提取为静态工具方法

简化条件逻辑: - 分解条件表达式:复杂if-else → 将条件提取为函数 - 以卫语句替代嵌套:深层嵌套 → guard提前返回 - 以多态替代条件式:基于类型的分支 → 策略/状态模式

简化函数: - 提取函数:过长函数 → 逻辑块提取为独立函数 - 以查询替代临时变量:临时变量只计算一次 → 提取为函数 - 引入参数对象:参数过多 → 相关参数封装为对象

第四步:执行重构

每次重构遵循:确认安全网→执行一个小重构→运行测试确认行为不变→继续下一个重构

第五步:验证结果

验证清单:所有测试通过、功能行为不变、坏味道消除、可读性提升、没有引入新坏味道


【代码模板】

坏味道识别检查表: ``` □ 是否有函数超过80行? □ 是否有超过5个参数的函数? □ 是否有相同/相似逻辑重复出现? □ 是否有if/for嵌套超过3层? □ 是否有未解释的魔法值? □ 是否有类承担过多职责? □ 是否有模块间过度耦合? ```

重构安全网检查: ``` □ 是否有单元测试覆盖待重构代码? - 有 → 确认测试覆盖率,补充缺失场景 - 无 → 先编写核心场景的测试 □ 是否有版本控制,可随时回退? ```

性能优化流程: ``` 1. 建立性能基准(当前耗时/吞吐量) 2. 性能剖析,定位瓶颈(Profiler) 3. 分析瓶颈根因 4. 设计优化方案 5. 实施优化 6. 对比基准,验证效果 ```


【复盘要点】

1. 行为不变是重构的铁律:重构是在不改变代码外部行为的前提下改善内部结构。任何重构如果没有测试保障或无法确认行为不变,都是危险的冒险。

2. 小步前进原则:每次只做一个小重构,立即验证,立即提交。大步重构看起来效率高,但一旦出错就难以定位,而小步重构每一步都可追溯。

3. 先度量后优化:性能问题往往是少数瓶颈导致的,在优化前必须先用Profiler等工具定位真正的瓶颈,避免优化错方向浪费精力。


来源:dkbnull/hello-skill (GitHub) | https://raw.githubusercontent.com/dkbnull/hello-skill/main/common/skills/refactoring/SKILL.md