重构 手法
手法简介:
1 名称
2 简短概要,介绍此重构手法的适用情景和所要做的事情
3 动机,为什么需要这个重构和什么情况下不该使用这个重构
4 做法,如何一步一步的进行此重构
5 范例,例子
重新组织函数
独立函数
将一段代码放进一个独立函数,让函数名称解释该函数的用途
过长的函数或者需要注释才能让人理解用途的代码,需要独立函数
内联函数
在函数调用点插入函数本体,然后移除该函数
如果函数内部代码和函数名称同样清晰,可以去掉函数,直接使用其中的代码
内联临时变量
将所有对该变量的引用动作,替换为表达式本身
以查询取代临时变量
如果临时变量保存某表达式的运算结果,可以将这个表达式提炼到一个独立函数中
局部变量会使代码难以被提炼,所以尽可能替换为查询式
引入解释性变量
将复杂表达式的结果放进一个临时变量,以变量名来解释表达式用途
当表达式非常复杂而难以阅读时,临时变量可以帮助你将表达式分解为比较容易管理的形式
分解临时变量
某个临时变量既不是循环变量,又不用于计算结果,针对每次赋值,创造一个独立,对应的临时变量
如果临时变量承担多个责任,就应该替换为多个临时变量,不然会令代码阅读者糊涂
移除对参数的赋值
当对一个参数进行赋值时,以一个临时变量取代该参数的位置
如果改变参数值,会降低代码的清晰度
以函数对象取代函数
有一个大型函数,很多局部变量,将这个函数放进一个单独对象中,局部变量就成了对象内的字段,然后就可以在同一个对象中将这个大型函数分解为多个小型函数
替换算法
把某个算法替换为更清晰的算法
重新组织对象
搬移函数
某个类中的函数跟另一个类有更多联系,则在该函数最常引用的类中建立一个类似行为的新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移除
如果一个类与另一个类有太多合作而形成高度耦合,则搬移函数
搬移字段
某个类中的字段跟另一个类有更多联系,则在目标类新建一个字段,改用新字段
提炼类
某个类做了两个类做的事,则建立一个新类,将相关的字段和函数从旧类搬移到新类
将类内联化
某个类没有做太多事情,将这个类的内容搬移到另一个类中
隐藏委托关系
客户通过一个委托类来调用另一个对象,可以在服务类上建立客户所需的所有函数,用来委托隐藏关系
移除中间人
某个类做个过多的简单委托动作,可以让客户直接调用受托类
引入外加函数
需要为提供服务的类增加一个函数,但是无法修改这个类。可以在客户类中建立一个函数,并以参数形式传入一个服务类实例
引入本地扩展
需要为提供服务的类增加一些额外函数,但是无法修改这个类。可以建立一个新类,包含这些额外函数。让这个扩展类成为源类的子类或包装类
重新组织数据
自封装字段
为字段建立取值/设值函数,并且只以这些函数来访问字段
以对象取代数据值
有一个数据项,需要与其他数据和行为一起使用才有意义。把数据项变成对象
将值对象改为引用对象
将引用对象改为值对象
以对象取代数组
简化条件表达式
分解条件表达式
复杂的条件语句,可以提炼出独立函数
合并条件表达式
将相同结果的判断合并为一个条件表达式,提炼成为一个独立函数
合并重复的条件片段
移除控制标记
以break或return取代控制标记
使用短小的条件判断,取代复杂的嵌套条件表达式
以多态取代条件表达式
引入null对象
引入断言
简化函数调用
函数改名
名称未能揭示函数的用途
将查询函数和修改函数分离
某个函数既返回对象内容,又修改对象内容,则分成两个函数,一个查询,一个修改
如果多个函数,做类似的工作,但只因少数几个值致使行为不同,则可以将函数统一起来,通过参数来处理变化
一个函数,完全取决于参数值而采取不同行为,可以针对每个行为建立一个独立函数
如果函数可以通过其他途径获得参数值,那么它就不应该通过参数取得该值,过长的参数列会增加程序阅读者的理解难度
如果某个字段在对象创建时被设置,然后就不再改变,可以去掉该字段的所有设值函数

浙公网安备 33010602011771号