重构目录
概述
重构目录是 Martin Fowler《重构》(第2版)中的一份精选重构手法集合,为开发者提供了改善现有代码设计的具体方法。
关键内容
- 使用方法:
- 识别代码中的异味(坏味道)
- 查找对应的重构手法
- 按照步骤执行
-
每步完成后进行测试
-
核心重构技术:
- Extract Method(提取方法)
- Inline Method(内联方法)
- Extract Variable(提取变量)
- Inline Variable(内联变量)
- Rename Variable(重命名变量)
- Change Function Declaration(变更函数声明)
- Encapsulate Variable(封装变量)
- Introduce Parameter Object(引入参数对象)
- Combine Functions into Class(组合函数到类)
-
异味到重构的映射:
- 长函数 → Extract Method、Replace Temp with Query
- 重复代码 → Extract Method、Pull Up Method、Form Template Method
- 大类 → Extract Class、Extract Subclass
- Feature Envy → Move Method、Move Field
- 基础类型沉迷 → Replace Primitive with Object、Replace Type Code with Class
- 长参数列表 → Introduce Parameter Object、Preserve Whole Object
- 数据泥团 → Extract Class、Introduce Parameter Object
- switch语句 → Replace Conditional with Polymorphism
- 臆想泛化 → Collapse Hierarchy、Inline Class、Remove Dead Code
-
实施策略:
- 分阶段推进:快速收益→结构改进→架构改动
- 阶段A:快速收益(低风险,高价值)- 重命名变量、提取重复代码、删除死代码
- 阶段B:结构改进(中风险)- 从长函数提取方法、引入参数对象、移动方法
-
阶段C:架构改动(高风险)- 用多态替代条件分支、提取类、引入设计模式
-
安全准则:
- 修改 → 测试 → 通过?→ 提交 → 下一步
- 每次只做一个小改动
- 保持改动最小化
-
保证测试始终通过
-
高级重构技术:
- Move Method(移动方法)
- Move Field(移动字段)
- Replace Primitive with Object(用对象替换原语)
- Replace Temp with Query(用查询替换临时变量)
- Decompose Conditional(分解条件)
- Consolidate Conditional Expression(合并条件表达式)
- Replace Nested Conditional with Guard Clauses(用卫句替换嵌套条件)
- Replace Conditional with Polymorphism(用多态替换条件)
- Introduce Special Case(引入特例)
来源
- Martin Fowler — 《重构》第2版
- 重构目录 — refactoring-catalog.md
- SKILL.md — 代码重构 skill 中的重构目录参考
相关
- 代码重构 — extends
- Martin Fowler — authored
- 代码异味 — addresses
- Extract Method — relates_to
- Inline Method — relates_to
- 设计模式 — relates_to