重构是在不改变外部可观察行为的前提下,改善代码内部结构。它的用处:消除重复与坏味道,让代码重新变得易读易改;把一次性的“打补丁”纠正为合理的抽象,降低后续需求的边际成本;还常常在阅读、重组旧代码的过程中暴露隐藏 bug。本质上,重构是在偿还技术债、维持代码的可演进性——不做重构的系统,改动会越来越慢、越来越危险。
应该重构的时机:
- 事前三板斧:加新功能前发现现有结构碍事,先重构再加功能。
- 重复出现三次:同样的逻辑第三次出现时提炼抽象(Rule of Three)。
- 读不懂时:读懂一段代码的过程本身就是把它重构清晰的最好机会。
- Code Review 与 bug 修复后:顺手清理现场(童子军军规)。
易错点:重构不是重写,必须小步前进、测试全程保护;不要在紧赶交付的同一个提交里混入大规模重构与功能变更,否则 review 和回滚都困难;没有测试覆盖的代码,先补特征测试再动刀。