阶级间依赖是一种反模式

时间:2014-04-28 19:00:23

标签: java design-patterns

最好解释我的小片段 - 下面。这里我们有两个类MathSolveEquation。他们都互相依赖。这是传统做法吗?还是应该不惜一切代价避免的反模式?

注意:请不要替代解决方案。这个例子是为了回答我的疑点而量身定做的。感谢。

例如:

class SolveEquation {
   public static int solveEquation(int x, int y) {
      return Math.add(x, y)  + Math.sub(x, y);
   }
}


class Math {
    public static int solveEquation(int x, int y) {
        return SolveEquation.solveEquation(x, y);
    } 

    public static int add(int x, int y) {
        return x + y;
    }

   public static int sub(int x, int y) {
        return x - y;
    }
}

1 个答案:

答案 0 :(得分:4)

这种情况称为循环依赖,是的,你应该避免它。至少如果你知道你可以避免它们,那就去做吧。

编辑: 你应该避免它们的原因有很多。

第一个是某些语言(如果我记得在C#中已经发生过这种情况),你将无法构建具有循环依赖关系的模块。 (哎呦)

第二个是它告诉我代码的质量可以更好。为什么?因为它通常会显示出紧密耦合的迹象,这使得代码的可重用性降低。

此外,在您的示例中,情况并非如此(因为您使用了静态方法),但是当您想要创建这些对象时,它会很难。特别是如果你正在使用依赖注入。

列出了更多原因here

  

循环依赖可能会在软件中造成许多不良影响   程式。从软件设计的角度来看,最有问题的是   相互依赖的模块的紧密耦合减少或   不可能单独重复使用单个模块。

     

当一个小的本地时,循环依赖可能会导致多米诺骨牌效应   一个模块中的更改会扩展到其他模块并且不需要   全局效应(程序错误,编译错误)。循环依赖   也可能导致无限递归或其他意外故障。

     

循环依赖性也可能通过阻止导致内存泄漏   某些非常原始的自动垃圾收集器(那些使用   引用计数)来解除分配未使用的对象。