urlname
type
Post
password
SyncToConfluence
category
学习笔记
date
Nov 26, 2025
slug
2474c190-e9ff-4445-b042-464ca03d6435
icon
Button
catalog
summary
tags
学习笔记
编程基础
专业能力
软件工程
代码质量
代码重构
cover
download.png
Status
BusyTime
Status 1
status
Published

重构的根本目的:改进软件的设计

重构的首要目标是 改进软件的内部设计(或者叫架构)
  • 对抗结构腐败(Degradation):如果没有经常进行重构,程序的内部设计会 逐渐腐败变质。当程序员只为短期目的修改代码时,他们可能没有完全理解整体架构,导致代码 逐渐失去了自己的结构
  • 累积效应:代码结构的流失具有 累积效应。越难看出代码的设计意图,就越难保护其设计,设计腐败得就越快。经常性的重构有助于代码 维持自己该有的形态
  • 消除重复代码:改进设计的一个重要方向是 消除重复代码。代码在不同的地方使用完全相同的语句做同样的事,这增加了代码量,也使未来的修改更困难。消除重复代码能确保所有事物和行为在代码中只表述一次,这是 优秀设计的根本
  • 设计持久性假说:通过投入精力改善内部设计(即重构),软件的耐久性增加,从而可以 更长时间地保持开发的快速

提高可理解性 (Make Software Easier to Understand)

重构的第二个关键原因是使软件 更容易理解
  • 源码的读者:除了计算机之外,源码还有其他读者,包括未来可能需要修改代码的程序员(或者就是未来的自己)。
  • 填补语义鸿沟:重构可以帮助代码 更好地表达自己的意图。当程序员努力让程序运转时,往往不会想到未来的开发者。通过在重构上花时间,代码可以更清晰地表述其意图。
  • 自我描述性:通过重构(如使用提炼函数、良好的命名),可以将脑海中的理解 转移到了代码本身。例如,如果一段代码需要注释来解释其作用,就可以将其提炼为一个函数,并以其用途命名,从而使代码 一目了然
  • 优秀的程序员唯有能写出人类容易理解的代码的,才是优秀的程序员

协助发现 Bug (Help Find Bugs)

重构是发现程序中潜在缺陷的有效手段。
  • 加深理解:在重构过程中,程序员会 深入理解代码的所作所为,并立即将新的理解反映在代码中。搞清楚程序结构的同时,也验证了自己所做的一些假设,这使得 想不把 bug 揪出来都难
  • 与测试协同:有了重构,即使发现 bug,也只需要检查最后一步的小修改。可靠的测试套件是重构的基础,能作为强大的 bug 侦测器,大大缩减查找 bug 所需的时间。

提高编程速度(Make Programming Faster)

尽管重构似乎会占用时间,但它最终目的是 提高编程速度
  • 保持快速开发:如果不重构,随着代码质量沉沦,想要添加一个新功能所需的时间会越来越长,因为代码库会变得像 补丁摞补丁。内部质量良好的软件,在需要添加新功能时,能让人很容易找到在哪里修改、如何修改。
  • 预备性重构添加新功能的最快方法往往是先修改现有的代码。预备性重构可以 让添加新功能更容易,即先重构程序使其结构良好,然后再添加特性。这就像是为了更快到达目的地,先上高速公路(重构),而不是直接穿过树林(盲目添加功能)。
  • 经济效益驱动:重构的唯一目的就是让我们 开发更快,用更少的工作量创造更大的价值

总结

重构并非仅仅是为了追求代码的“纯粹”或“整洁”——尽管它确实带来了这些益处。重构的真正价值在于其带来的 经济效益。通过不断地改进软件的内部结构,重构能够保持代码库的健康,使开发团队能够 更快、更低成本地为用户添加新特性,从而实现 可持续的快速开发
重构代码就像是在维护一条繁忙的城市公路。一开始,你可以快速修补路面(添加新功能),但如果不定期重铺路基(重构内部设计),随着车辆(功能)的增加和时间的推移,路面会变得坑洼不平(设计腐败)。最终,修补工作(添加新功能)会变得越来越慢、越来越昂贵,直到你不得不停工大修。持续的重构确保了这条道路始终保持高质量,使得运输(开发)可以持续快速地进行。
 
学习笔记——《重构改善现有代码2》:什么时候重构需求记录——白板克拉斯航海尺
Loading...