您的位置:首页 > 编程语言

重构-代码的坏味道

2017-08-20 16:10 323 查看

一、Duplicated Code(重复代码)

1、同一个类的两个函数含有相同的表达式:Extract Method提炼重复代码;

2、两个互为兄弟的子类内含有相同表达式:Extract Method提炼重复代码,使用Pull Up Method,推入超类;

3、代码只是类似,并非完全相同:Extract Method将相似部分和差异部分分割,构成单独函数。运用Form Template Method获得一个Template Method设计模式;

4、如果有些函数以不同的算法做相同的事,可以选择其中较清晰的一个,使用Substitute Algorithm将其他函数的算法替换掉;

5、两个毫不相关的类出现Duplicated Code:Extract Class提炼到一个独立类中,直接使用这个新类。

二、Long Method(过长函数)

如何确定:

1、寻找注释。每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途命名。对一行或一组代码都可以这么做,关键不在函数长短,而在于函数做什么和如何做。

2、条件表达式和循环

Decompose Conditional处理条件表达式。

方法:

Extract Method:找到函数中适合集中在一起的部分,提炼出来

如果函数内有大量的参数和临时变量,就会当做入参,可读性没有提升。可以运用Replace Temp with Query消除临时元素。

Introduce Parameter Object和Preserve Whole Object 则可以将过长的参数列表变得更简洁。

仍有太多临时变量和参数,Replace Method with Method Object

三、Large Class(过大的类)

Extract Class、Extract Subclass、Extract Interface

四、Long Parameter List(过长参数列)

向已有的对象发出一条请求就可以取代一个参数:Replace Parameter with Method

将来自同一个对象的一对数据收集起来,并以该对象替换它们:Preserve Whole Object。

如果缺乏合理的对象归属,可以制造出一个参数对象:Introduce Parameter Object

五、Divergent Change(发散式变化)

Divergent Change:某个类经常在不同的原因在不同的方向上发生变化。

找出某特定原因而造成的所有变化,提炼到另一个类中:Extract Class

六、Shotgun Surgery(霰弹式修改)

Shotgun Surger:每遇到某种变化,都必须在许多不同的类内做出许多小修改。如果修改的代码散布四处,很难找到,并且容易忘记。

所有需要修改的代码放进同一个类:Mvoe Method和Move Field

Divergent Change:一个类受多种变化的影响

Shotgun Surger:一种变化引发多个类相应修改

七、Feature Envy(依恋情节)

使用Extract Method把这一部分提炼到独立函数中,然后把函数移到该去的地方:Mvoe Method

八、Data Clumps(数据泥团)

Data Clumps:两个类中相同的字段、许多函数签名中相同的参数,总是出现

Extract Class提到到一个独立的对象,运用Introduce Parameter Object 或Preserve Whole Object  将很多参数列缩短,简化函数调用。

九、Primitive Obsession(基本类型偏执)

将单独存在的数据值替换为对象:Replace Data Value with Object

替换的数据值是类型码Replace Type Code with Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: