press Ctrl + F to search for what you want

重构-改善既有代码的设计 - 坏味道

2018-11-09

代码里散发出来的坏味道,你闻到了吗?

1.重复代码。

2.过长函数

分解:有注释的地方,循环,通过易理解的函数名来封装

3.过大的类

4.过长的参数列

用对象传递

5.发散式变化

一个类受多种变化的影响。针对某一外界变化的所有相应修改,都只应该发生在单一类中,而这个新类的所有内容都应该反应此变化。

6.散弹式修改

(一种变化引发多个类响应修改)。把所有需要修改的代码放进同一个类

7.依恋情结

(函数对某个类的兴趣高过对自己所处类的兴趣,最通常的焦点便是数据)。方法归属:判断那个类拥有最多被此函数使用的数据,然后就把这个函数和那些数据摆在一起

8.数据泥团

(两个类中相同的字段,许多函数中相同的参数)。这些总是一起出现的数据应该拥有属于他们自己的对象

9.基本类型偏执。

运用小对象,将本来单独存在的数据值替换为对象。

10.Switch statements。

考虑用多态来替换。或者使用Map的方式

11.平行继承体系

(为某个类添加一个子类,必须也为另一个类相应增加一个子类。某个继承体系的类名称前缀和另一个继承体系的类名称前缀完全相同)。让一个继承体系的实例引用另一个继承体系的实例。

12.Lazy Class(冗余类)

如果一个类的所得不值其身价,它就应该消失。

13.Speculative Generality(夸夸其谈未来性)

不要过多考虑将来所做。

14.Temporary Field(令人迷惑的暂时字段)

某个仅为特定情况而设的变量及相关代码抽取为一个类。

15.过度耦合的消息链。

16.Middle Man(中间人)
减少没有用的委托

17.Inappropriate Intimact(狎昵关系)

把两者共同点提炼到一个安全地点,

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

如果两个函数做同一件事情,却有着不同的签名运用move method。如果重复引入代码才能完成则考虑抽取为父类

19.Incomplete Library Class(不完美的库类)

引入外来方法或本地扩展

20.Data Class(纯稚的数据类)

21.Refused Bedquest(被拒绝的遗赠)

22.Comments(过多的注释)


#