《重构》——改善既有代码的设计

重构(Refactoring):在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。 —— Martin Fowler

一、全书概览

《重构》是软件工程领域的经典著作,由 Martin Fowler 主笔,Kent Beck 等多位领域专家合著部分章节。全书构建了一套系统化的代码改进方法论:将”整理代码”从随性的手工活,变成有步骤、可验证、低风险的工程行为。

核心主张:软件的设计不是写代码前一次性完成的,而是在开发过程中通过持续重构逐步浮现、持续优化的。好代码不是一开始就写对的,而是不断改出来的。

全书结构(15章 + 附录)

部分章节核心内容
基础篇第1章重构入门案例:一个影片租赁小程序的完整重构过程
第2章重构的定义、原则、时机、与设计/性能的关系
第3章代码的”坏味道”(22种)——识别何时该重构
第4章构筑测试体系——重构的安全网
第5章重构列表的使用方法
重构手法篇第6章重新组织函数(9种手法)
第7章在对象之间搬移特性(8种手法)
第8章重新组织数据(16种手法)
第9章简化条件表达式(8种手法)
第10章简化函数调用(15种手法)
第11章处理概括关系(继承体系,12种手法)
第12章大型重构(4种重量级手法)
延伸篇第13章重构、复用与现实(Bill Opdyke)
第14章重构工具(Don Roberts & John Brant)
第15章总结(Kent Beck 压轴)

二、核心概念

1. 重构 vs 重做

重构不是重做(redo)。重做是推倒重来,重构是在保留现有功能的前提下改进代码结构。

2. 重构的两大要素

  • 坏味道(Code Smells):代码中的警示信号,表明可能存在设计问题
  • 重构手法(Refactoring Techniques):具体的变换步骤,逐步改进代码

3. 何时重构

  • 添加功能时
  • 审查代码时发现问题
  • 编写单元测试时
  • 代码异味出现时

三、代码的22种坏味道

  1. 神秘命名(Mysterious Name)
  2. 重复代码(Duplicate Code)
  3. 过长函数(Long Function)
  4. 过大数据团(Data Clumps)
  5. 过长参数列(Long Parameter List)
  6. 可变数据(Mutating Data)
  7. 发散式变化(Divergent Change)
  8. 霰弹式修改(Shotgun Surgery)
  9. 依恋情妇(Feature Envy)
  10. 数据泥团(Data Clumps)
  11. 基本类型偏执(Primitive Obsession)
  12. 替代算法(Switch Statements)
  13. 并行继承体系(Parallel Inheritance Hierarchies)
  14. 冗赘类(Lazy Class)
  15. 夸夸其谈通用性(Speculative Generality)
  16. 临时字段(Temporary Field)
  17. 人云亦云(People Pyramid)
  18. 注释(Comments)—— 本意是好的,但通常是代码不足的掩饰

四、核心重构手法举例

提取函数(Extract Function)

// Before
void printOwing() {
    printBanner();
    // print details...
}

// After
void printOwing() {
    printBanner();
    printDetails(details);
}

内联函数(Inline Function)

当函数体比函数名更有价值时,可以将函数调用替换为函数体。

移动函数(Move Function)

当一个函数大量引用另一个类中的元素时,考虑将其移动过去。

五、重构与安全网

单元测试的重要性

重构的前提是有充分的测试覆盖。测试是重构的安全网,确保修改不会破坏现有功能。

重构的步骤

  1. 选择重构对象
  2. 理解当前行为
  3. 编写测试
  4. 执行重构
  5. 运行测试验证
  6. 删除冗余测试

六、与其他知识的关联


处理状态: 本书已有完整的中文笔记,无需重复处理。原PDF为水印版,本次跳过。