其他
在需要重构、清理或改善代码质量时…
当用户要求重构、清理代码、消除技术债或代码坏味道时,用一套识别坏味道并安全重构的流程来改善结构、可读性与可维护性。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 47/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 47/100 ×0.15
适用场景
在需要重构、清理或改善代码质量时,按代码通用
解决思路
- 遵循四条重构原则:保持外部行为不变;小步增量修改;确保重构前后测试通过;每次成功重构后提交。
- 识别并处理 Long Method(函数超过 20-30 行):用 Extract Method 把大函数拆成 validateOrder、calculateTotals、saveOrder、sendConfirmation 等小函数。
- 识别并处理 Duplicate Code(多处相似代码):用 Extract Method / Template Method 抽出共享类,例如把重复的 validateEmail 抽成 EmailValidator。
- 识别并处理 Large Class(一个类职责过多):用 Extract Class 拆分为 User、UserAuth、UserProfile、UserNotifier 等。
- 识别并处理 Long Parameter List(4 个以上参数):用 Introduce Parameter Object,把参数合并为 UserData 之类的参数对象。
- 识别并处理 Feature Envy(方法过度使用其他类的数据):用 Move Method 把方法移到它真正依赖的类中,例如把格式化逻辑移到 Formatter。
- 识别并处理 Data Clumps(相同数据总是一起出现):用 Extract Value Object,把 x、y、width、height 抽成 Rectangle 类。
- 识别并处理 Primitive Obsession(用基本类型代替小对象):用 Replace Primitive with Object,例如用 Email 类封装校验逻辑。
- 识别并处理 Switch Statements(对类型的大 switch):用 Replace Conditional with Polymorphism,把 calculatePay 的 switch 改为各 Employee 子类实现。
- 识别并处理 Temporary Field(只在特定场景使用的变量):用 Extract Class,把临时计算逻辑抽成 RefundCalculator。
- 识别并处理需要大量注释的代码:用 Extract Method 配合清晰命名,例如把 calc 改为 calculateTotalPrice 并拆出 applyVIPDiscount、applyTax。
- 按六步执行重构:识别坏味道 → 确定重构手法 → 确保测试通过(Green)→ 应用重构 → 运行测试验证行为不变 → 提交小而原子的 commit。
- 采用安全实践:使用 IDE 的重构工具(Rename、Extract、Move);每次改动后频繁运行测试;保持提交小而聚焦;写清晰的提交信息;复杂重构考虑代码评审。
- 重构前检查:测试通过、理解代码作用、已识别具体坏味道、知道该用哪种重构、有回滚方案。
- 重构后检查:测试仍通过、代码更可读、更易维护、未引入新坏味道、必要时更新文档。
- 参考 references/smells.md(坏味道目录)、references/techniques.md(重构手法)、references/checklist.md(重构清单)。
适用边界 · 注意事项
- 代码没有测试覆盖时,不应直接重构,应先补测试再动手。
- 不理解代码当前行为时,不应贸然重构。
- 没有回滚方案或无法小步提交时,不应进行复杂重构。