重构(笔记)——第三章

511 阅读2分钟

代码中的坏味道

Duplicated Code(重复代码)

重复的代码应该抽取成方法,然后在其他地方调用该方法即可。

Long Method(过长函数)

方法体过长,也应该抽取多个方法出来,然后进行方法间的调用。

Large Class(过大的类)

类过大就意味着一个类要做的事情会很多,这样不妨将一个过大的类的方法分解,然后重新组合,这样就可以形成多个类,然后在多个类之间调用。

Long Parameter List(过长的参数列)

参数过长,封装成对象,然后将对象做为参数进行传递。注意:在这之前,需要将不必要的参数去除。

Divergent Change(发散式变化)

一个类会受到多种变化的修改。注册方式变了,登录的类不会受到响应。

Shotgun Surgery(霰弹式修改)

一种变化引发多个类进行修改。比如:登录方法由原先的用户名密码登录变为手机号验证码登录,只应该修改登录的类,而其他类不会受到影响。

Feature Envy(依恋情结)

一个类中的某个方法需要大量调用其他类的 get 方法,那么这个方法应该被迁移至 get 方法对应类中。

Data Clumps(数据泥团)

两个类中相同的字段,许多函数函数中相同的参数。这些总是绑在一起出现的数据应该拥有属于它们自己的对象。找出这些数据以字段形式出现的地方,运行“提炼类” 将它们提炼到一个独立对象中。

Primitive Obsession(基本类型偏执)

使用包装数据而不是基本数据类型。

Switch Statement(switch 惊悚现身)

少用 Switch 语句

Parallel Inheriance Hierarchies(平行继承体系)

每当你为某个类增加一个子类,也必须一个类相应增加一个子类。

Lazy Class (冗余类)

多余的类应该被干掉

Speculative Generality (夸大未来性)

现在不需要的,未来不太可能需要,即使未来需要也不是以现在的方式存在。所以请干掉代码中为未来考虑的部分。

Temporary Field(临时字段)

Message Chains (过度耦合的消息链)

Middle Man (中间人)

Inappropriate Intimacy(狎昵关系)

Alternative Classes with Different Interfaces (异曲同工的类)

两个函数有相同的功能,却有不一样的签名,请根据其用途重新命名,多个方法移入类中

Incomeplete Library Class (不完美的库类)

Data Class(纯稚的数据类)

Refused Bequest (被拒绝的遗赠)

Comments (过多的注释)

在这其中,我们说代码要具有自释性。如果代码需要写很多注释的时候,你就应该抽取成方法。