• 重构是什么(WHAT)?
  • 第2章:我们为什么要重构(WHY)?
  • 第3章:
    • 什么样的代码需要重构(WHERE)?
    • 什么时候需要重构(WHEN)?
  • 怎么去重构(HOW)?

image.png

怎么去重构 HOW?

重新组织函数

  • Extract Method(提炼函数)
  • Inline Method(内联函数)
  • Inline Temp(内联临时变量)
  • Replace Temp with Query(以查询取代临时变量)
  • Introduce Explaining Variable(引入解释性变量)
  • Split Temporary Variable(分解临时变量)
  • Remove Assignments to Parameters(移除对参数的赋值)
  • Replace Method with Method Object(以函数对象取代函数)
  • Substitute Algorithm(替换算法)

在对象之间搬移特性

  • Move Method(搬移函数)
  • Move Field(搬移字段)
  • Extract Class(提炼类)
  • Inline Class(将类内联化)
  • Hide Delegate(隐藏“委托关系”)
  • Remove Middle Man(移除中间人)
  • Introduce Foreign Method(引入外加函数)
  • Introduce Local Extension(引入本地扩展)

重新组织数据

  • Self Encapsulate Field(自封装字段)
  • Replace Data Value with Object(以对象取代数据值)
  • Change Value to Reference(将值对象改为引用对象)
  • Change Reference to Value(将引用对象改为值对象)
  • Replace Array with Object(以对象取代数组)
  • Duplicate Observed Data(复制“被监视数据”)
  • Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)
  • Change Bidirectional Association to Unidirectional(将双向关联改为单向关联)
  • Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)
  • Encapsulate Field(封装字段)
  • Encapsulate Collection(封装集合)
  • Replace Record with Data Class(以数据类取代记录)
  • Replace Type Code with Class(以类取代类型码)
  • Replace Type Code with Subclasses(以子类取代类型码)
  • Replace Type Code with State/Strategy(以State/Strategy取代类型码)
  • Replace Subclass with Fields(以字段取代子类)

简化条件表达式

  • Decompose Conditional(分解条件表达式)
  • Consolidate Conditional Expression(合并条件表达式)
  • Consolidate Duplicate Conditional Fragments(合并重复的条件片段)
  • Remove Control Flag(移除控制标记)
  • Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
  • Replace Conditional with Polymorphism(以多态取代条件表达式)
  • Introduce Null Object(引入Null对象)
  • Introduce Assertion(引入断言)

简化函数调用

  • Rename Method(函数改名)
  • Add Parameter(添加参数)
  • Remove Parameter(移除参数)
  • Separate Query from Modifier(将查询函数和修改函数分离)
  • Parameterize Method(令函数携带参数)
  • Replace Parameter with Explicit Methods(以明确函数取代参数)
  • Preserve Whole Object(保持对象完整)
  • Replace Parameter with Methods(以函数取代参数)
  • Introduce Parameter Object(引入参数对象)
  • Remove Setting Method(移除设值函数)
  • Hide Method(隐藏函数)
  • Replace Constructor with Factory Method(以工厂函数取代构造函数)
  • Encapsulate Downcast(封装向下转型)
  • Replace Error Code with Exception(以异常取代错误码)
  • Replace Exception with Test(以测试取代异常)

处理概括关系

  • Pull Up Field(字段上移)
  • Pull Up Method(函数上移)
  • Pull Up Constructor Body(构造函数本体上移)
  • Push Down Method(函数下移)
  • Push Down Field(字段下移)
  • Extract Subclass(提炼子类)
  • Extract Superclass(提炼超类)
  • Extract Interface(提炼接口)
  • Collapse Hierarchy(折叠继承体系)
  • Form Template Method(塑造模板函数)
  • Replace Inheritance with Delegation(以委托取代继承)
  • Replace Delegation with Inheritance(以继承取代委托)

大型重构

  • Tease Apart Inheritance(梳理并分解继承体系)
  • Convert Procedural Design to Objects(将过程化设计转化为对象设计)
  • Separate Domain from Presentation(将领域和表述/显示分离)
  • Extract Hierarchy(提炼继承体系)