Inappropriate Intimacy(狎昵关系)
表现:两个classes过于亲密,花费太多时间去探究彼此的private成分
解决:你可以采用 Move Method 和 Move Field 帮它们划清界线,从而减少狎昵行径。你也可以看看是否运用 Change Bidirectional Association to Unidirectional 让其中一个class对另一个斩断情丝。如果两个实在是情投意合,可以运用Extract Class 把两者共同点提炼到一个安全地点,让它们坦荡地使用这个新class。或者也可以尝试运用 Hide Delegate 让另一个class来为它们传递相思情。
继承(inheritance)往往造成过度亲密,因为subclass对superclass的了解总是超过superclass的主观愿望。如果你觉得该让这个孩子独自生活了,请运用Replace Delegation with Inheritance 让它离开继承体系。
参考文档:Inappropriate Intimacy(狎昵关系)
表现:函数对某个class的兴趣高过对自己所处之host class的兴趣。
原则:判断哪个class拥有最多「被此函数使用」的数据,然后就把这个函数和那些数据摆在一起。
解决:使用Move Method 把函数移到它该去的地方。有时候函数中只有一部分受这种依恋之苦,这时候你应该使用 Extract Method 把这一部分提炼到独立函数中,再使用Move Method 带它去它的梦中家园。
参考文档:Feature Envy(依恋情结)
共同点:都可以用搬移方法、搬移字段来重构,依恋情结更像是狎昵关系的子集,依恋情结是函数的坏味道,狎昵关系则是两个类之间的,但是类终究是函数和字段组成的。