当这些包中的类之间存在使用或导入类型的依赖时,包之间就存在循环。
考虑以下示例。假设有 4 个类:Truck
和 org.example.car
包中的接口(interface) Car
以及 Navigation
和 CPU
在包 org.example.part
中。在包 org.example.car
和 org.example.part
中,我们有类 Truck --> Car
和类 之间的使用关系导航 --> CPU
。假设 Truck
类使用 Navigation
类,所以我们有数据包之间的关系 org.example.car --> org.example.part
.然后假设类CPU
也使用了Car
接口(interface),这给了我们包之间的关系org.example.part --> org.example.car
。尽管 Navigation
类不使用任何类的数据包 org.example.car
我们在包中的相邻类(CPU
类)上有一个循环.
这个例子如下图所示:
当一个循环中涉及多个包时,这意味着这些包高度耦合,如果不导入所有其他包,就无法重用/提取其中一个包。这样的循环可能会迅速增加维护应用程序和接受业务变更所需的工作量。
最佳答案
要修复包中的依赖循环,您应该引入额外的包并将几个依赖类/接口(interface)移动到新创建的包中。
如下图所示:
在我们的示例中,让我们选择将接口(interface)Car
移动到新创建的包org.example.api
。这打破了依赖循环并降低了我们应用程序中的技术部门。现在,所有包仅以一种方式具有依赖关系,并且可以根据需要将它们拆分为不同的工件。
关于java - 这是什么意思以及如何修复 SonarQube Java 问题 "Cycles between packages should be removed"(鱿鱼 :CycleBetweenPackages),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34899712/