Циклы существуют между пакетами, когда существуют зависимости использования или импорта вида между классами в этих пакетах.Что это значит и как исправить проблему сонара Java? «Циклы между пакетами должны быть удалены» (squid: CycleBetweenPackages)
Рассмотрим следующий пример. Пусть есть 4 класса: Truck
и интерфейс Car
в org.example.car
пакет и Navigation
и CPU
в пакете org.example.part
. В пакетах 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
. Хотя класс Navigation
не использует класс пакетов org.example.car
, у нас есть цикл соседних классов в пакетах (CPU
класс).
Этот пример представлен на рисунке ниже:
Когда несколько пакетов участвуют в цикле, это означает, что эти пакеты высоко в сочетании, и не существует никакого способа повторного использования/извлечения одного из тех, пакетов без импорта всех других пакетов. Такой цикл может быстро увеличить усилия, необходимые для поддержания приложения и принятия изменений в бизнесе.
И в чем ваш вопрос? Я имею в виду, что вы одновременно отправили «вопрос» и «ответ». – SubOptimal
@SubOptimal Я думаю, что главный вопрос: «как исправить»; «что это значит», кажется, очень хорошо охвачено. –
Возможно, это сообщение объясняет, по крайней мере, «что это значит» http://www.sonarqube.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/ – SubOptimal