最好解释我的小片段 - 下面。这里我们有两个类Math
和SolveEquation
。他们都互相依赖。这是传统做法吗?还是应该不惜一切代价避免的反模式?
注意:请不要替代解决方案。这个例子是为了回答我的疑点而量身定做的。感谢。
例如:
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;
}
}
答案 0 :(得分:4)
这种情况称为循环依赖,是的,你应该避免它。至少如果你知道你可以避免它们,那就去做吧。
编辑: 你应该避免它们的原因有很多。
第一个是某些语言(如果我记得在C#中已经发生过这种情况),你将无法构建具有循环依赖关系的模块。 (哎呦)
第二个是它告诉我代码的质量可以更好。为什么?因为它通常会显示出紧密耦合的迹象,这使得代码的可重用性降低。
此外,在您的示例中,情况并非如此(因为您使用了静态方法),但是当您想要创建这些对象时,它会很难。特别是如果你正在使用依赖注入。
列出了更多原因here
循环依赖可能会在软件中造成许多不良影响 程式。从软件设计的角度来看,最有问题的是 相互依赖的模块的紧密耦合减少或 不可能单独重复使用单个模块。
当一个小的本地时,循环依赖可能会导致多米诺骨牌效应 一个模块中的更改会扩展到其他模块并且不需要 全局效应(程序错误,编译错误)。循环依赖 也可能导致无限递归或其他意外故障。
循环依赖性也可能通过阻止导致内存泄漏 某些非常原始的自动垃圾收集器(那些使用 引用计数)来解除分配未使用的对象。