这意味着什么?如何解决“可能是Java问题”;应删除包装之间的循环;(鱿鱼:两个包装之间的循环)

这意味着什么?如何解决“可能是Java问题”;应删除包装之间的循环;(鱿鱼:两个包装之间的循环),java,architecture,sonarqube,circular-dependency,qa,Java,Architecture,Sonarqube,Circular Dependency,Qa,当包中的类之间存在使用或导入种类的依赖关系时,包之间存在循环 考虑下面的例子。在org.example.Car包和Navigation和CPU包org.example.part中设为4类:Truck和interfaceCar。在包org.example.car和org.example.part中,我们在类Truck-->car和类Navigation-->CPU之间使用关系。让我们假设类Truck使用Navigation类,因此我们有数据包org.example.car-->org.exampl

当包中的类之间存在使用或导入种类的依赖关系时,包之间存在循环

考虑下面的例子。在
org.example.Car
包和
Navigation
CPU
org.example.part
中设为4类:
Truck
和interface
Car
。在包
org.example.car
org.example.part
中,我们在类
Truck-->car
和类
Navigation-->CPU
之间使用关系。让我们假设类
Truck
使用
Navigation
类,因此我们有数据包
org.example.car-->org.example.part
之间的关系。然后假设类
CPU
也使用
Car
接口,它为我们提供了包
org.example.part-->org.example.Car
之间的关系。虽然class
Navigation
不使用任何类的packet
org.example.car
但是我们在包中的相邻类上有一个循环(
CPU
class)

该示例如下图所示:


当一个循环中涉及多个包时,这意味着这些包是高度耦合的,如果不导入所有其他包,就无法重用/提取其中一个包。这样的周期可以快速增加维护应用程序和接受业务更改所需的工作量。

要修复软件包中的依赖性周期,您应该引入额外的软件包,并将两个依赖类/接口移动到新创建的软件包中

如下图所示:


在我们的示例中,让我们选择将接口
Car
移动到新创建的包
org.example.api
。这打破了依赖循环,降低了应用程序的技术成本。现在,所有包都只有一种依赖关系,如果需要,可以将它们拆分为不同的工件。

您的问题是什么?我的意思是你同时发送了一个“问题”和一个“答案”。@次优我认为主要问题是“如何解决”;“它的意思是什么”似乎涵盖得很广。也许这篇文章至少解释了“它的意思是什么”@SubOptimal这是一篇问答风格的文章,答案如下所示