Как исправить циклическую зависимость между Java-модулями? - PullRequest
1 голос
/ 30 марта 2019

Я рефакторинг кода, чтобы он использовал модули. Проблема, с которой я сталкиваюсь, заключается в том, что я получил циклическую зависимость между модулями: converttersapp, validatorsapp и modelapp . Есть 6 модулей, а именно:

1. convertersapp
2. exceptionsapp
3. mainapp
4. modelapp
5. serviceapp
6. validatorapp

Module dependencies

Мой текущий подход - module-info. Java-файлы для каждого модуля:

1. convertersapp: module convertersapp {
  requires modelapp;
  requires gson;
  requires exceptionspp;
  requires validatorapp;
  exports converters.others to serviceapp;
  exports converters.json to modelapp;
}

2. exceptionsapp: module exceptionspp {
  exports exceptions to convertersapp, mainapp,serviceapp, modelapp;
}

3. mainapp: module mainapp {
  requires serviceapp;
  requires exceptionspp;
  requires modelapp;
}

4. modelapp: module modelapp {
  exports model to mainapp, validatorapp,convertersapp, serviceapp;
  exports model.sorting to mainapp,serviceapp;
  requires gson;
  requires exceptionspp;
  requires convertersapp;
}

5. servicapp: module serviceapp {
  exports service to mainapp;
  requires modelapp;
  requires exceptionspp;
  requires convertersapp;
}

6. validatorapp: 

  module validatorapp {
  exports validator to convertersapp;
  requires modelapp;
}

1 Ответ

3 голосов
/ 30 марта 2019

Следует избегать иерархии циклических зависимостей, поскольку ее трудно понять и, кроме того, неясно, в каком порядке следует строить модули (от A до B до C до A ...).

Общие стратегии:

  • Объединение всех трех модулей в один
  • Создайте общий служебный модуль, который используется другими, но сам по себе не использует другие.
  • Переместите некоторые классы, чтобы избежать цикличности.
...