【问题标题】:What does it mean and how to fix SonarQube Java issue "Cycles between packages should be removed" (squid:CycleBetweenPackages)这是什么意思以及如何修复 SonarQube Java 问题“应删除包之间的循环”(squid:CycleBetweenPackages)
【发布时间】:2022-05-11 08:06:15
【问题描述】:

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

考虑以下示例。假设有 4 个类:org.example.car 包中的Truck 和接口Car 以及org.example.part 包中的NavigationCPU。在包org.example.carorg.example.part 中,类Truck --> Car 和类Navigation --> CPU 之间存在使用关系。假设Truck 类使用Navigation 类,所以我们有数据包org.example.car --> org.example.part 之间的关系。然后假设类CPU也使用Car接口,这给了我们包org.example.part --> org.example.car之间的关系。尽管Navigation 类不使用任何包类org.example.car,但我们在包中的相邻类(CPU 类)上有一个循环。

这个例子如下图所示:

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

【问题讨论】:

  • 你的问题是什么?我的意思是你同时发送了一个“问题”和一个“答案”。
  • @SubOptimal 我认为主要问题是“如何修复”; “这是什么意思”似乎很好地涵盖了。
  • 也许这篇文章至少解释了“这是什么意思”sonarqube.org/…
  • @SubOptimal 这是问答风格的文章,下面提供了答案

标签: java architecture sonarqube circular-dependency


【解决方案1】:

要修复包中的依赖循环,您应该引入额外的包并将几个依赖类/接口移动到新创建的包中。

如下图所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2021-01-09
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多