【代码重构】依恋情结(Feature Envy)和不合适的亲昵关系(Inappropriate Intimacy)-- 解决一个函数访问其它对象的数据比访问自己的数据更多的情况

依恋情结

●症状和特点

   一个方法访问另一个对象的数据多于访问它自己的数据。
在这里插入图片描述

●问题产生的原因

   在将字段移动到数据类之后,可能会出现这种情况。如果是这种情况,您可以将数据的操作也移到该类中。

●解决方法

   作为一个基本规则,如果事情同时发生变化,你应该让它们保持在同一个地方。通常数据和使用该数据的函数一起更改(尽管可能存在异常)。
   如果一个方法显然应该移动到另一个地方,请使用移动方法法
   如果一个方法只有一部分访问另一个对象的数据,则使用提取方法法来移动相关的部分。
   如果一个方法使用了来自其他几个类的函数,首先确定哪个类包含了使用的大部分数据。然后将该方法与其他数据一起放在该类中。或者,使用提炼方法法将方法分成几个部分,这些部分可以放在不同类的不同位置。
在这里插入图片描述

●好处

   减少代码重复(如果数据处理代码放在一个集中的位置)。
   更容易组织代码(处理数据的方法与实际数据相邻)。

不合适的亲昵关系

●症状和特点

   一个类使用另一个类的内部字段和方法。
在这里插入图片描述

●问题产生的原因

   密切关注那些花太多时间在一起的类。好的类应该尽可能少地相互了解。这样的类更容易维护和重用。

●解决方法

   最简单的解决方案是使用移动方法法移动变量法将一个类的部分移动到使用这些部分的类中。但这只在第一类确实不需要这些零件的情况下才有效。
在这里插入图片描述
   另一个解决方案是在类上使用提取类法隐藏委托法来使代码关系“正式”。
   如果类是相互依赖的,您应该使用更改双向关联为单向关联法
   如果这种“亲密关系”发生在子类和父类之间,请考虑将委托替换为继承。
在这里插入图片描述

●好处

   改进代码组织。
   使代码维护更容易且容易重构。

猜你喜欢

转载自blog.csdn.net/weixin_41937380/article/details/128899467