1 God Class
1.1 特征
上帝类通常为过多的操做其他类的数据,从而破坏了类的封装性。上帝类从其他类中获得功能,同时增加了自身的耦合性,通常会导致自己体积过大和较大的复杂度。
判断一个上帝类的标准有:
1. CPFD (Capsules Providing Foreign Data) 从多个不相关类(模块)中引用数据
2. WOC(Weighted Operation Count)类的所有函数的圈复杂度之和超过65
3. TCC (Tight Capsule Cohesion)TCC < 1/3 类需要具有低内聚的特性(类中直接相关的方法与全部方法之比小于1/3),也就是较少的private方法
4. 需要同时满足以上条件才可以被认定为上帝类
1.2 修改
破坏CPFD, WOC, TCC 中的一个。
2 Message Chains
2.1 特征
过度耦合的消息链
如果你看到用户向一个对象索求(request)另一个对象,然后再向后者索求另一个对象,然后再索求另一个对象……这就是Message Chains。实际代码中你看到的可能是一长串ge
tThis()或一长串临时变量。采取这种方式,意味客户将与查找过程中的航行结构(structure of the navigation)紧密耦合。一旦对象间的关系发生任何变化,客户端就不得不做出相应修改。
Infusion通常会寻找具有较多调用其他类数据访问接口的方法,而且会检查返回值是否匹配。
2.2 修改
采用“隐藏委托关系”修改。
先观察Message Chains最终得到的对象是用来干什么的,看看能否以 Extract Method 把使用该对象的代码提炼到一个独立函数中,再运用Move Method 把这个函数推入Message Chains。
3 FeatureEnvy
3.1 特征
函数对某个class的兴趣高过对自己所处之host class的兴趣。最通常的焦点便是数据,通常为某个函数为了计算某值,从另一个对象那儿调用几乎太多取值函数(getting method)。