What does it mean and how to fix SonarQube Java issue “Cycles between packages should be removed” (squid:CycleBetweenPackages)

旧时模样 提交于 2020-01-06 02:56:26

问题


Cycles exist between packages when there are dependencies of using or importing kind between classes in these packages.

Consider the following example. Let there be 4 classes: Truck and interface Car in org.example.car package and Navigation and CPU in package org.example.part. In packages org.example.car and org.example.part we have use relations between classes Truck --> Car and classes Navigation --> CPU. Let's assume that the class Truck use Navigation class so we have the relationship between packets org.example.car --> org.example.part. Then assume that the class CPU also uses the Car interface, which gives us the relationship between packages org.example.part --> org.example.car. Although the class Navigation does not use any class of packet org.example.car we have a cycle on neighboring classes in packages (CPU class).

This example is presented in figure below:

When several packages are involved in a cycle, that means those packages are highly coupled, and there is no way to reuse/extract one of those packages without importing all the other packages. Such cycle could quickly increase the effort required to maintain an application and embrace business change.


回答1:


To fix dependency cycle in your packages you should introduce additional package and move couple of dependent classes/interfaces to that newly created package.

This is presented in figure below:

In our example, let us chose to move interface Car to newly created package org.example.api. That breaks the dependency cycle and lowers technical dept in our application. Now all packages have dependencies in only one way and it is possible to split them in different artifacts if needed.



来源:https://stackoverflow.com/questions/34899712/what-does-it-mean-and-how-to-fix-sonarqube-java-issue-cycles-between-packages-s

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!