重构 手法

手法简介:

1 名称

2 简短概要,介绍此重构手法的适用情景和所要做的事情

3 动机,为什么需要这个重构和什么情况下不该使用这个重构

4 做法,如何一步一步的进行此重构

5 范例,例子

 

重新组织函数

独立函数

将一段代码放进一个独立函数,让函数名称解释该函数的用途

过长的函数或者需要注释才能让人理解用途的代码,需要独立函数

 

内联函数

在函数调用点插入函数本体,然后移除该函数

如果函数内部代码和函数名称同样清晰,可以去掉函数,直接使用其中的代码

 

内联临时变量

将所有对该变量的引用动作,替换为表达式本身

 

以查询取代临时变量

如果临时变量保存某表达式的运算结果,可以将这个表达式提炼到一个独立函数中

局部变量会使代码难以被提炼,所以尽可能替换为查询式

 

引入解释性变量

将复杂表达式的结果放进一个临时变量,以变量名来解释表达式用途 

当表达式非常复杂而难以阅读时,临时变量可以帮助你将表达式分解为比较容易管理的形式

 

分解临时变量

某个临时变量既不是循环变量,又不用于计算结果,针对每次赋值,创造一个独立,对应的临时变量

如果临时变量承担多个责任,就应该替换为多个临时变量,不然会令代码阅读者糊涂

 

移除对参数的赋值

当对一个参数进行赋值时,以一个临时变量取代该参数的位置

如果改变参数值,会降低代码的清晰度

 

以函数对象取代函数

有一个大型函数,很多局部变量,将这个函数放进一个单独对象中,局部变量就成了对象内的字段,然后就可以在同一个对象中将这个大型函数分解为多个小型函数

 

替换算法

把某个算法替换为更清晰的算法

 

 

重新组织对象

搬移函数

某个类中的函数跟另一个类有更多联系,则在该函数最常引用的类中建立一个类似行为的新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移除

如果一个类与另一个类有太多合作而形成高度耦合,则搬移函数

 

搬移字段

某个类中的字段跟另一个类有更多联系,则在目标类新建一个字段,改用新字段

 

提炼类

某个类做了两个类做的事,则建立一个新类,将相关的字段和函数从旧类搬移到新类

 

将类内联化

某个类没有做太多事情,将这个类的内容搬移到另一个类中

 

隐藏委托关系

客户通过一个委托类来调用另一个对象,可以在服务类上建立客户所需的所有函数,用来委托隐藏关系

 

移除中间人

某个类做个过多的简单委托动作,可以让客户直接调用受托类

 

引入外加函数

需要为提供服务的类增加一个函数,但是无法修改这个类。可以在客户类中建立一个函数,并以参数形式传入一个服务类实例

 

引入本地扩展

需要为提供服务的类增加一些额外函数,但是无法修改这个类。可以建立一个新类,包含这些额外函数。让这个扩展类成为源类的子类或包装类

 

重新组织数据

自封装字段

为字段建立取值/设值函数,并且只以这些函数来访问字段

 

以对象取代数据值

有一个数据项,需要与其他数据和行为一起使用才有意义。把数据项变成对象

 

将值对象改为引用对象

 

将引用对象改为值对象

 

以对象取代数组

 

简化条件表达式

分解条件表达式

复杂的条件语句,可以提炼出独立函数

 

合并条件表达式

将相同结果的判断合并为一个条件表达式,提炼成为一个独立函数

 

合并重复的条件片段

 

移除控制标记

以break或return取代控制标记

 

使用短小的条件判断,取代复杂的嵌套条件表达式

 

以多态取代条件表达式

 

引入null对象

 

引入断言

 

简化函数调用

函数改名

名称未能揭示函数的用途

 

将查询函数和修改函数分离

某个函数既返回对象内容,又修改对象内容,则分成两个函数,一个查询,一个修改

 

如果多个函数,做类似的工作,但只因少数几个值致使行为不同,则可以将函数统一起来,通过参数来处理变化

 

一个函数,完全取决于参数值而采取不同行为,可以针对每个行为建立一个独立函数

 

如果函数可以通过其他途径获得参数值,那么它就不应该通过参数取得该值,过长的参数列会增加程序阅读者的理解难度

 

如果某个字段在对象创建时被设置,然后就不再改变,可以去掉该字段的所有设值函数

 

posted @ 2019-11-08 10:23  褐色键盘  阅读(385)  评论(0)    收藏  举报