1482 字
7 分钟

《重构》读后感:改善代码质量的实践指南

《重构》读后感:改善代码质量的实践指南#

最近读完了 Martin Fowler 的经典著作《重构:改善既有代码的设计》,这是一本每个程序员都应该阅读的技术书籍。本书不仅系统地介绍了重构的概念和方法,更重要的是提供了一套实用的重构技术体系。

📚 书籍概览#

《重构》这本书的核心理念是:通过一系列小的、保持行为的转换,逐步改善代码的设计。Fowler 在书中详细阐述了什么是重构、为什么需要重构,以及如何进行重构。

核心观点#

  1. 重构的定义:重构是一种对软件内部结构的改善,目的是在不改变软件可观察行为的前提下,使其更易理解和修改。

  2. 重构的时机:不是等到代码腐烂不堪时才重构,而是在添加功能、修复 bug、代码审查时持续进行。

  3. 重构的步骤:小步快跑,每次只做微小的改动,确保测试通过后再进行下一步。

🔍 重构的基本原则#

1. 保持行为不变#

重构的第一要务就是确保代码的外部行为不会改变。这意味着:

  • 所有现有的功能测试都应该继续通过
  • 用户看不到任何差异
  • API 接口保持不变

2. 小步前进#

不要试图一次性做大规模的重构,而是:

  • 每次只做一个微小的改动
  • 每步都要运行测试
  • 频繁提交代码

3. 消除代码坏味道#

Fowler 在书中总结了多种”代码坏味道”,包括:

  • 重复代码:相同的代码出现在多个地方
  • 过长函数:函数体过大,难以理解和维护
  • 过大的类:类承担了过多的责任
  • 过长参数列表:函数参数过多
  • 发散式变化:一个类因为多种原因需要修改
  • 霰弹式修改:一个修改需要在多个类中进行

🛠️ 常用重构技术#

书中介绍了 60 多种具体的重构技术,这里分享几个最常用和实用的:

1. 提炼函数(Extract Method)#

// 重构前
function printOwing(amount) {
printBanner();
console.log("name:", name);
console.log("amount:", amount);
}
// 重构后
function printOwing(amount) {
printBanner();
printDetails(amount);
}
function printDetails(amount) {
console.log("name:", name);
console.log("amount:", amount);
}

2. 内联函数(Inline Method)#

与提炼函数相反,当函数体过于简单时,可以将其内联到调用处。

3. 提炼变量(Extract Variable)#

// 重构前
if (platform.toUpperCase().indexOf("MAC") > -1 &&
browser.toUpperCase().indexOf("IE") > -1) {
// do something
}
// 重构后
const isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
const isIEBrowser = browser.toUpperCase().indexOf("IE") > -1;
if (isMacOs && isIEBrowser) {
// do something
}

4. 引入参数对象(Introduce Parameter Object)#

当一组参数总是一起出现时,可以将它们封装成一个对象。

5. 拆分循环(Split Loop)#

一个循环只做一件事情,避免在一个循环中处理多个不同的逻辑。

🧪 测试驱动重构#

重构的前提是有一套可靠的测试套件。Fowler 强调:

  1. 先写测试,再重构:确保重构前的代码行为是正确的
  2. 小步重构,频繁测试:每做一点改动就运行测试
  3. 保持测试通过:如果测试失败,立即回滚或修复

💡 个人收获与实践#

读完这本书后,我在实际工作中应用重构技术,收获颇丰:

1. 代码质量显著提升#

通过持续的小步重构,代码变得更加清晰、易读、易维护。函数的粒度更合适,类的职责更加单一。

2. 开发效率提高#

虽然重构本身需要时间,但良好的代码结构让后续的功能开发和 bug 修复变得更加高效。

3. 团队协作更顺畅#

清晰的代码结构和命名让团队成员更容易理解彼此的代码,减少了沟通成本。

4. 技术债务管理#

通过持续重构,避免了技术债务的积累,不会让代码库逐渐变得难以维护。

🎯 重构的最佳实践#

基于书中的理论和我的实践经验,总结以下最佳实践:

1. 建立重构文化#

  • 将重构视为开发过程的一部分
  • 鼓励团队成员进行重构
  • 在代码审查中关注重构机会

2. 工具支持#

  • 使用 IDE 的重构功能(如 VSCode、IntelliJ 等)
  • 配置代码质量检查工具(如 ESLint、SonarQube 等)
  • 建立自动化测试流程

3. 渐进式重构#

  • 不要试图一次性重构整个系统
  • 在新功能开发时顺便重构相关代码
  • 优先重构经常变动的代码区域

4. 文档记录#

  • 记录重要的重构决策
  • 分享重构经验和最佳实践
  • 建立团队的重构指南

🤔 重构 vs 重写#

很多人会把重构和重写混淆,Fowler 在书中明确区分了两者:

  • 重构:保持外部行为不变,逐步改善内部结构
  • 重写:从头开始重新实现,通常会改变外部行为

重构的风险更小,成本更低,应该优先考虑重构而非重写。

📖 总结#

《重构》这本书不仅提供了系统的方法论,更重要的是建立了一种持续改进代码质量的思维方式。它让我明白:

  1. 好的代码是演进出来的,不是一开始就完美的
  2. 小步快跑比大步跳跃更安全有效
  3. 测试是重构的基石
  4. 重构应该是开发者的日常习惯

这本书值得反复阅读,每次重读都会有新的收获。强烈推荐给所有想要提高代码质量的开发者!


如果你也读过这本书,欢迎在评论区分享你的感悟和实践经验。让我们一起写出更好的代码!

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
《重构》读后感:改善代码质量的实践指南
https://jielumoon.top/posts/refactoring-book-review/
作者
Jielumoon
发布于
2025-11-22
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-11-22,距今已过 65 天

部分内容可能已过时

评论区

目录