Java: 在同一个包中循环依赖是不好的做法吗?

Java: Is it bad practice to have a circular dependency within the same package?

在同一个 Java 包中的 类 之间循环依赖是不好的做法吗?

如果没有,我想要一个有信誉的参考指南,某处是这样说的。

就其本身而言,循环依赖不是问题。然而,他们所指出的——紧耦合——通常可能是一个问题。从本质上讲,通过紧密耦合两个 classes,您接受其中一个的变化可能导致另一个的变化。如果两个 class 具有不同的职责,这可能会成为一个问题 - 实际上,通过将它们紧密耦合,您是在说他们分担责任,因此违反了 Single Responsibility Principle.

如果您在同一个包中的两个 class 之间存在循环依赖,那么有一些直接的问题需要回答:

  • 为什么不把它们合并成一个class?

  • 为什么不让一个成为另一个的内部 class?

  • 为什么不通过明智地使用接口来解耦它们?

  • 是否还有其他 class 设计更有意义?

紧密耦合的 class 之间的距离越远,这些问题和其他问题的紧迫性就越大。这在一定程度上是关于 classes 在包方面的接近程度——在同一工件的同一包内比在同一工件的不同包之间更不值得关注。然而,如果它们 class 位于不同的工件(即 jar)但在同一个包中,那么它们不应该紧密耦合也是事实 - 因为这可能导致客户端无法独立升级库依赖项版本。

对于这个主题的 'reputable' 参考,你可能比 Bob Martin 的书做得更糟 "Agile Software Development"。