笔记
← 返回《重构-改善既有代码的设计》系列目录 NOTES

22|重构被夸大了吗?——对福勒的几种批评

如果重构真的既能改善结构又能提升速度,为什么现实中还有那么多人对它心存疑虑?

22|重构被夸大了吗?——对福勒的几种批评.md 更新于 2026-09-23 ~9 分钟阅读

一、先说结论

要点

对重构的批评里,确实有几条站得住:它依赖测试,而测试本身有成本;在遗留系统里常常想测都无从下手;实践中存在为重构而重构、偏离业务价值的情况;它的收益难以量化,容易被当成「不产出」;此外还有「重构 vs 前期设计」的路线之争。

但换个角度看,这些批评大多不是要否定重构,而是在追问同一件事:在什么条件下、投入多少、由谁来做? 把重构当成无条件正确的教条,和把它当成毫无价值的洁癖,是同一种误读的两面。


二、我们先理解一个问题

先看一场常见的技术评审会。

一方说:「这段代码再不重构,以后没人敢改。」

另一方说:「重构重构,上个季度业务需求都排不下,你还有空整理代码?」

两边听起来都有道理,却永远吵不到一起去。为什么?

因为他们其实在争论不同的东西:一个谈的是长期维护成本,一个谈的是本期能不能交付。如果不把「前提条件」摆到桌面上,这场争论就注定没有答案。

所以真正值得问的是:重构这件事,到底在什么前提下才成立?它的代价和边界又在哪里?


三、作者到底提出了什么观点?

先说清楚一件事:很多对「重构」的批评,针对的其实不是福勒本人,而是被简化、被口号化的「重构」。

福勒本人在书里的立场其实很有分寸:

也就是说,那个被批评的「逢乱必改、不计代价」的重构,并不是福勒的主张。

这里要严格区分三层:福勒认为,重构要嵌入日常、要克制、要有测试兜底;软件工程界普遍认为,重构是长期项目里必要的维护手段;而存在争议的部分,是它的成本、边界与适用条件。下面提到的种种批评,多来自不同的实践者,本文会尽量标明。


四、把这个观点翻译成人话

想象健身。

适度运动有益健康,这几乎没人反对。但下面这些说法就是另一回事了:

运动本身是对的,出问题的是目的错位、剂量失控、以及把手段当成了目标。

对重构的批评,很多也正是这个结构:反对的不是「整理代码」,而是「为了整理而整理」「不计代价地整理」「把手段当目的」。分清楚这一点,很多争论就清晰了。


五、为什么会这样?

把常见的批评按来源整理成一条链:

graph TD
    A[重构作为一种实践] --> B[安全阀是测试]
    B --> C[但测试要写、要维护、要花时间]
    C --> D[批评一: 门槛与成本]
    A --> E[遗留系统往往没有测试]
    E --> F[批评二: 想测也无从下手]
    A --> G[有人把重构本身当成目标]
    G --> H[批评三: 为重构而重构, 偏离业务]
    A --> I[收益是未来的、概率的]
    I --> J[批评四: 难以量化, 被当成不产出]
    A --> K[重构相信结构可以涌现式生长]
    K --> L[批评五: 与前期设计之争]
    D --> M[共同落点: 条件 / 投入 / 由谁做]
    F --> M
    H --> M
    J --> M
    L --> M

关系示意图

这张图想说明:这五条批评看似分散,最后都收敛到同一组变量上——条件、投入、由谁来做。

条件,指有没有测试、有没有安全网;投入,指愿意为它花多少时间;由谁做,指这是个人顺手为之,还是需要组织决策。这三个变量不回答清楚,正反双方就只是在各说各话。


六、举一个现实生活中的例子

几个开发场景。

第一,大重构暂停业务。 某团队决定把核心结算模块「彻底重写式地重构」,为此暂停新需求两个月。期间竞争对手上线了新功能,业务方压力巨大;两个月后上线,还带出一批回归问题。从此,「重构」在这家公司成了一个敏感词。

问题其实不在重构,而在于:做一个需要暂停业务的大动作时,没有分阶段、没有保持系统始终可工作。

第二,对协作的冲击。 一个涉及几百个文件的改名重构,会把真正的功能改动淹没在噪音里。评审人无从下手,新贡献者的改动也没人看了。结构是好看了,协作反而更差了。

第三,结构好不等于产品对。 一个团队把代码整理得非常优雅,模块边界清晰、命名讲究,但产品方向选错了,用户根本不买。技术上的整洁,救不了一个没人要的产品。

这三个例子分别对应了成本、协作和价值三个层面的批评,它们都是真实会发生的。


七、回到书中重新理解

回头再看福勒,你会发现他其实是这些批评的「同盟军」,而不是靶子。

所以真正值得警惕的,不是福勒的原始论述,而是被剥离了前提、只剩口号的那句「代码要重构」。

换句话说,批评「重构原教旨主义」是对的,但把这笔账记在福勒头上,多半是找错了对象。


八、这个观点背后还有什么?

这些点说明,重构从来不是一个纯技术问题,它牵涉排期、组织与协作。


九、这个观点有问题吗?

十、今天再看这个观点

(以下为现代延伸,非福勒原文)

今天的争论又多了几层。

一是重构开始被当成绩效包装。有人把大范围改动标成「重构」,实际上改了行为、甚至引入了风险,让「重构」这个词本身逐渐失信。

二是AI 生成代码带来的新压力。当代码被快速生产出来,结构劣化的速度也变快了,「要不要重构」从选择题变成了必答题;但与此同时,AI 也让大规模机械重构第一次变得便宜可行。

三是大规模自动化迁移。一些大型技术组织用工具一次性改造成千上万个文件,这更像一次工程化的「大重构」。它既验证了自动化能大幅降低执行成本,也提醒我们:越是大规模改动,越依赖清楚的验证与评审,而不是手速。

这些都不是福勒书中的内容,而是围绕他的思想延伸出来的新问题。


十一、这一篇真正应该记住什么?

  1. 对重构的批评大多成立, 但它们指向的是「条件、投入与执行方式」,而不是「重构本身没有价值」。

  2. 很多批评针对的是被口号化的重构。 福勒本人恰恰用三次法则和不该重构清单,在限制重构。

  3. 测试成本、遗留系统困境、为重构而重构, 是三条最现实的批评,它们都有真实案例支撑。

  4. 收益难以量化,是因为它避免的是未来的痛苦。 度量方式不改,这类工作永远显得「不产出」。

  5. 「重构 vs 前期设计」没有标准答案, 取决于系统规模、需求稳定度和团队经验,不能一刀切。


十二、留一个问题

如果重构的收益与风险,几乎全部取决于人的判断——判断该不该改、改到什么程度、由谁来做——那么有一个问题就绕不开了:

当 AI 已经能够替我们执行重构时,这种判断会变得更不重要,还是更重要?

下一篇,也是这个系列的最后一篇,我们就来聊聊 AI 时代的人工重构。