何时重构 |
如何重构 |
代码坏味道 |
Duplicated Code(重复代码) |
重新组织函数 |
Extract Method(提炼函数) |
Long Method(过长函数) |
Inline Method(内联函数) |
Large Class(过大的类) |
Inline Temp(内联临时变量) |
Long Parameter List(过长参数列) |
Replace Temp with Query(以查询取代临时变量) |
Divergent Change(发散式变化) |
Introduce Explaining Variable(引入解释性变量) |
Shotgun Surgery(霰弹式修改) |
Split Temporary Variable(分解临时变量) |
Feature Envy(依恋情结) |
Remove Assignments to Parameters(移除对参数的赋值) |
Data Clumps(数据泥团) |
Replace Method with Method Object(以函数对象取代函数) |
Primitive Obsession(基本类型偏执) |
Substitute Algorithm(替换算法) |
Switch Statements(switch惊悚现身) |
在对象之间搬移特性 |
Move Method(搬移函数) |
Parallel InheritanceHierarchies(平行继承体系) |
Move Field(搬移字段) |
Lazy Class(冗赘类) |
Extract Class(提炼类) |
Speculative Generality(夸夸其谈未来性) |
Inline Class(将类内联化) |
Temporary Field(令人迷惑的暂时字段) |
Hide Delegate(隐藏“委托关系”) |
Message Chains(过度耦合的消息链) |
Remove Middle Man(移除中间人) |
Middle Man(中间人) |
Introduce Foreign Method(引入外加函数) |
Inappropriate Intimacy(狎昵关系) |
Introduce Local Extension(引入本地扩展) |
Alternative Classes with Different Interfaces(异曲同工的类) |
重新组织数据 |
Self Encapsulate Field(自封装字段) |
Incomplete Library Class(不完美的库类) |
Replace Data Value with Object(以对象取代数据值) |
Data Class(纯稚的数据类) |
Change Value to Reference(将值对象改为引用对象) |
Refused Bequest(被拒绝的遗赠) |
Change Reference to Value(将引用对象改为值对象) |
Comments(过多的注释) |
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 Tem Plate Method(塑造模板函数) |
|
|
Replace Inheritance with Delegation(以委托取代继承) |
|
|
Replace Delegation with Inheritance(以继承取代委托) |
|
|
大型重构 |
Tease Apart Inheritance(梳理并分解继承体系) |
|
|
Convert Procedural Design to Objects(将过程化设计转化为对象设计) |
|
|
Separate Domain from Presentation(将领域和表述/显示分离) |
|
|
Extract Hierarchy(提炼继承体系) |