重构手法
admin
11月 11, 2020
0

一、重新组织函数
- 过长函数,或需要注释才能让人理解用途的代码
- 将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。
- 局部变量的处理
Inline Method (内联函数)
- 函数内部代码和函数名称清晰易读,许多不合理的函数,函数之间委托
- 在函数调用点插入函数本体,然后移除该函数
Inline Temp (内联临时变量)
- 将所有对变量的引用动作,替换为对它赋值的那个表达式自身
- 临时变量被赋予某个函数调用的返回值,妨碍了其他的重构手法
Replace Temp with Query (以查询取代临时变量)
- 将这个表达式提炼到一个独立函数中。将这个临时变量的所有引用点替换为对新函数的调用。伺候,新函数就可以被其他函数使用。
Introduce Explaining Variable (引入解释性变量)
- 将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途
- 在提取函数花费较大工作量时
分解临时变量
- 针对每次赋值,创造一个独立、对应的临时变量
- 临时变量承担多个责任
Remove Assignment to Parameters (移除对函数的赋值)
Replace Method with Method Object (以函数对象取代函数)
- 将这个函数放进一个单独对象中,如此一来局部变量就成了对象中的字段。然后可以在同一个对象中将这个大型函数分解为多个小型函数
- 将所以局部变量变成函数对象的字段,新对象可以创造新函数。
Substitute Algorithm (替换算法)
二、在对象之间搬移特性
Move Method(搬移函数)
- 在该函数最常引用的类中建立了一个有着类似行为的新函数。将就函数编程一个单纯的委托函数,或将就函数完全移除。
Move Field (搬移字段)
- 在目标类新建一个字段,修改源字段的所有用户,令他们改用新字段
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(赋值被监视数据)
- 该数据复制到一个领域对象中。建立一个Observer模式,用以同步领域对象和GUI对象内的重复数据
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 State/Strategy(以State/Strategy取代类型码)
Replace Subclass with Fields(以字段取代子类)
- 修改这些函数,使他们返回超类中的某个(新增)字段,然后销毁子类
近期评论