methodology · H · P0 · active

重构手法族

Refactoring Catalog and Techniques
P0进阶verified方法论 methodology方法H · 实现与构造技术债GL-METHOD · 方法论层

§1摘要与结论

TL;DR · 一句话结论

在不改变可观察行为的前提下,按命名的小步手法持续改善代码内部结构的方法族;以代码坏味道为信号、以测试为安全网,把结构调整为可验证的小步而非大重写。

别名:重构、refactoring、重构目录 | 英文:Refactoring Catalog and Techniques | 类型:方法 / technique-catalog

§2局部关系图

重构手法族 的 1-2 跳邻域关系图前置依赖(prerequisite):理解信息隐藏是评估内聚耦合的前提前置依赖(prerequisite):内聚耦合度量指导边界划分组合(combination):单一知识源与高内聚同向协同依据推导(derives_from):行为保持重构是偿还技术债的核心手段依据推导(derives_from):债务象限与偿还策略依据技术债本质前置依赖(prerequisite):坏味道作为启发式信号触发重构依赖关联(dependency):债务偿还依靠行为保持重构前置依赖(prerequisite):改动遗留代码前先建立行为安全网跨体系对照(cross_reference):行为保持纪律与重构手法族分工互补组合(combination):SOLID 管职责与替换性,组合优先管复用机制细化(refines):SOLID 以职责划分细化高内聚低耦合判据前置依赖(prerequisite):职责划分与替换性判据是理解模式适用性的前提细化(refines):模式是被命名的内聚与解耦结构解法依据推导(derives_from):持续设计投入以降低长期认知负荷为目标依据推导(derives_from):战略式设计以职责划分与替换性为判据依据推导(derives_from):可读性治理以可读性为工程属性为前提依据推导(derives_from):评审以高内聚低耦合作为结构判据组合(combination):持续设计投入与代码评审共同对抗结构腐化组合(combination):持续设计以重构为日常改进手段组合(combination):评审发现的坏味道交由重构手法处理案例印证(case_instance):印证:以行为保持为前提重组内部结构案例印证(case_instance):印证:单一契约源消除接口知识的多份副本案例印证(case_instance):印证:以内聚与耦合维度逐点评估通道结构案例印证(case_instance):印证:特化标识由提供者构造期绑定,通用契约零扩展案例印证(case_instance):印证:以代码审查工具为解析对象的质量工程实现(implements):静态分析平台为代码评审提供自动化检查信号实现(implements):规则引擎自动化识别代码坏味道案例印证(case_instance):印证:以自动化代码审查工具为载体沉淀质量实践前置依赖(prerequisite):模块化目标是信息隐藏判据的前提前置依赖(prerequisite):模块划分质量以内聚耦合衡量前置依赖(prerequisite):信息隐藏是判断继承/组合取舍的前提依赖关联(dependency):继承在父子类之间引入实现层耦合依据推导(derives_from):限界上下文依边界与接口隔离原理依据推导(derives_from):重构以改善内聚耦合、降低变更成本依据推导(derives_from):信息隐藏模块分解是信息隐藏原理的方法化组合(combination):信息隐藏与限界上下文同属模块边界判据组合(combination):重构手法族用于达成信息隐藏分解边界促成(enables):重构手法使信息隐藏在既有代码上可逐步落地重构手法族重构手法族(MTH-H-01)内聚与耦合内聚与耦合(ESS-H-02)信息隐藏模块化分解信息隐藏模块化分解(MTH-H-02)战略式编程与持续设计投入战略式编程与持续设计投入(MTH-H-03)代码复审与可读性治理代码复审与可读性治理(MTH-H-04)行为保持重构行为保持重构(MTH-L-01)边界与接口隔离边界与接口隔离(ESS-G-03)SonarQube 静态…SonarQube 静态分析平台(TEC-H-01)信息隐藏信息隐藏(ESS-H-01)技术债本质技术债本质(ESS-L-02)preset 通道耦合分…preset 通道耦合分析(CAS-X-05)Open Code Re…Open Code Review 图谱(CAS-X-15)模块化与分解模块化与分解(ESS-G-04)技术债象限与偿还策略技术债象限与偿还策略(MTH-L-03)网申 v2 深度重构网申 v2 深度重构(CAS-X-04)DRY 单一知识来源DRY 单一知识来源(ESS-H-03)SOLID 职责划分与替…SOLID 职责划分与替换性(ESS-H-08)设计模式与反模式设计模式与反模式(ESS-H-09)领域驱动战略设计领域驱动战略设计(MTH-G-04)遗留系统渐进治理遗留系统渐进治理(MTH-L-06)组合优于继承与脆弱基类组合优于继承与脆弱基类(ESS-H-06)可读性与认知负荷可读性与认知负荷(ESS-H-07)代码坏味道启发式代码坏味道启发式(MTH-L-02)
前置依赖实现依据推导案例印证对比冲突
以本节点为中心,静态内联 1–2 跳邻域:内环 5 个直接邻接、外环 17 个二跳节点,共 23 个节点;连线按边类型着色(六类配色见下)。构建期计算,无运行期脚本。

§3原理 · 为什么

重构是对软件内部结构的修改,目的是使其更易理解、更易修改,而不改变其可观察行为——这是重构与重写、加功能的根本区别。重构把「改善设计」从一次性大动作拆解为可逐步验证的小步:每一步都不改变行为,因而可在测试保护下持续进行,使设计随需求演化而不失控,避免技术债持续累积。其前提是承认内部质量影响变更成本:结构一旦腐化,之后每次改动都更慢、更易出错,因此重构不是洁癖,而是对长期交付速度与可理解性的持续投资,也是控制软件熵与架构侵蚀的日常手段。把重构纳入日常开发节奏,比集中式大清理更安全、更可持续。重构与性能优化、功能新增需区分:前者不改变行为,后两者会改变可观察行为,混淆会破坏小步可验证的基本前提;它也不等同于格式化或注释整理,那些属表层整理,未必触及结构。重构能力也是团队技能,需要刻意练习与共同语言。

§4机制 · 如何运作

以代码坏味道为启发式信号(坏味道是深层问题的表层迹象,而非结论);按命名手法(Fowler 重构目录)逐一施加小步变换,每步后运行测试确认行为不变。重构与功能变更交替进行、可分时提交;遗留代码以「先补测试、再重构」处理,因为遗留代码即「没有测试的代码」,其判据在可变更性而非年代或技术栈。常见手法覆盖重命名、抽取/内联方法、搬移特性、以多态取代条件、封装字段等,目录化的命名使团队能用同一套词汇精确沟通结构改动,降低协作摩擦,并让重构过程可被审查与复现。坏味道与手法之间存在成对映射,掌握映射即可把「感觉不好」转化为具体的下一步动作。手法之间存在依赖与组合关系,通常由小到大逐步演进:先做安全的机械化重命名,再逐步抽取或搬移,使每一步都能独立验证并随时停下;目录本身可作教学与评审清单,帮助识别漏掉的结构问题。

§5工程 · 怎么落地

维持稳定的自动化测试作为安全网,最好覆盖所改路径;小步提交、频繁运行测试,使失败可快速定位;用坏味道目录与重构目录建立团队共同语言;机会性重构与预防性重构结合,避免「重构专用冲刺」式的大爆炸;对无测试遗留代码先用特征测试固定现状行为,再逐步重构,使每一步都有回归保护。编写新代码时可用测试驱动开发形成重构节律;评审时区分行为变更与结构变更,让重构改动与功能改动分开提交,便于审查与回滚。把重构与代码评审、结对编程结合,可在低成本下持续改善结构,防止债务无声累积。除了单元测试,类型系统、编译器与静态检查也是有效的安全网,可在重构中快速暴露不一致;对关键路径应分小步、频繁提交,使任何一步失败都能低成本回退;对无人理解的遗留模块,先加日志与特征测试建立观察点,再谈结构调整;重构前应确保工作区干净、变更可独立回退。

§6权衡卡

代价 · 风险

重构有成本且不直接交付功能:在交付压力下容易被无限推迟,长期积累为技术债、拖慢后续变更。

重构固有的回归风险要求测试保护,缺测试时贸然重构可能悄悄改变行为。

另一个隐性代价是重构改变了代码结构,可能使书签、文档与团队记忆失效,需要同步更新说明与培训;因此重构的时机与幅度应与团队熟悉度、测试覆盖和交付压力一起权衡,不能机械追求「随时重构」。

重构的力度也应与风险相称:低风险区可放手整理,核心区则宜小步慎行。

重构的价值最终应由变更成本的下降来验证,而非由代码行数或提交次数衡量。

反例 · 误区

反例:把「重构」当作加功能或大重写的借口(改变了可观察行为),或在无测试的遗留代码上大规模重排结构,都会放大缺陷与回归,与重构「不改变行为」的定义相悖。

第二个反例是只做机械美化(格式、改名)而不触及真正结构问题,收益有限;第三个反例是重构范围过大、一次提交过多,使审查与定位失败变得困难。

权衡原文仅按显式标记词归栏引用(收益 / 代价 / 反例),其余句子按原序列为「原文要点」;内容逐字引用未改写。

§7案例带

CAS-X-02 · 2 跳派生:当前节点 → ESS-H-02 → ESS-G-03

网申填写扩展逆向架构

对 Chrome MV3 网申自动填写扩展的逆向架构分析:梳理 popup、content、background、options 四模块职责,解剖 12 个站点适配器、双通道消息协议与隐私脱敏机制,并评估其零依赖零构建选型。

CAS-X-03 · 2 跳派生:当前节点 → ESS-H-02 → ESS-H-03

网申 v3 多模块解耦

一套面向高可扩展性的网申信息速查扩展架构:以 schema.js 为唯一数据驱动源,把数据模型、存储、纯函数与渲染组织为严格单向依赖的共享层,供 popup 与页面浮层双容器复用,并先立跨模块接口契约。

CAS-X-04 · 经 MTH-L-01

网申 v2 深度重构

一次由「改一处漏多处」症状触发的深度重构:定位到接口定义散落 12 个文件、存在 7 种接口形态的根因后,以单一契约源、dispatch 消息表与能力注册中心重建三层契约系统,恢复可审计与可校验性。

CAS-X-05 · 经 ESS-H-02

preset 通道耦合分析

对 harness「委派工具层→续用管理器→preset 服务→MCP 服务器」这条通道做耦合分析:识别契约、服务定位、数据契约、组合语义、路径与装配一致性六类耦合点,定位「静默丢弃特化」与「装配漂移」两处实质缝隙。

CAS-X-08 · 2 跳派生:当前节点 → ESS-H-02 → ESS-G-03

dsh-manager 插件深度分析

以「编译依赖、运行时注入、组合装配」三硬依据加源码行号,对第三方插件做依赖、功能、需求溯源与设计问题裁决,并复用上游 DAG 知识库节点标识,使分析结果可与主图互查。

CAS-X-11 · 2 跳派生:当前节点 → ESS-H-02 → ESS-G-04

Hermes 七层架构总览

对八千余文件的工业级 AI Agent 项目做七层架构总览逆向,揭示其「越用越聪明」的自进化闭环如何在层间传导的控制型架构案例。

CAS-X-15 · 经 MTH-H-04

Open Code Review 图谱

对阿里开源 AI 代码审查 CLI 做源码级解析并构建「知识 + 实践资产 + AI 索引」三合一知识图谱的工程案例。

§8信源与核验

核验状态True(verified)
置信度high
复核日期2026-10-12
生命周期active
规范信源BK-021、BK-022、WEB-017、WEB-014
书证核验BK-021 Ch3(direct),ChDefining Refactoring(direct),ChFormat of the Refactorings(direct),ChHow Mature Are These Refactorings?(direct);BK-022 ChSeam Types(direct),ChSeams(direct)
勘误
常见误解:重构就是重写或可顺带加功能
核验结论:重构是对内部结构的修改,不改变可观察行为;加功能或重写会改变行为,二者须与重构分开进行 [BK-021]
勘误
常见误解:遗留代码由年代或技术栈界定
核验结论:Feathers:遗留代码即「没有测试的代码」,判据在可变更性/可验证性而非年代或技术栈 [BK-022]

§9原始关系清单

展开:本节点的全部原始关系边(6 条,含边 ID 与方向)
关系方向对端节点说明
组合→ MTH-H-02信息隐藏模块化分解
E-212
重构手法族用于达成信息隐藏分解边界
组合← MTH-H-03战略式编程与持续设计投入
E-752
持续设计以重构为日常改进手段
组合← MTH-H-04代码复审与可读性治理
E-753
评审发现的坏味道交由重构手法处理
跨体系对照← MTH-L-01行为保持重构
E-621
行为保持纪律与重构手法族分工互补
依据推导→ ESS-H-02内聚与耦合
E-206
重构以改善内聚耦合、降低变更成本
促成→ MTH-H-02信息隐藏模块化分解
E-214
重构手法使信息隐藏在既有代码上可逐步落地