Android: Как библиотечный модуль использует класс, определенный в модуле приложения?

#android #dependencies

#Android #зависимости

Вопрос:

 /MyProj
|---/MyApp (application module)
    |----/MyData
         |----class Person
|---/MyLib (library module)
    |----/MyMethod
  

В MyData я определяю класс Person:

 public class Person{
}
  

Как я могу ссылаться на Person в myMethod MyLib, который является библиотечным модулем?

Я не хочу переопределять Person в MyLib.

Ответ №1:

Если вы хотите иметь это в своем myLib, вам нужно добавить модуль приложения в качестве зависимости в свой myLib, ЧТО НЕВЕРНО и создает циклическую зависимость.

Чтобы предотвратить циклическую зависимость в многоуровневых шаблонах проектирования, они помещают классы моделей в отдельный модуль, чтобы все остальные модули могли их использовать.

Я предлагаю вам создать модуль модели и поместить в него все ваши модели данных, после чего вы сможете получить к нему доступ только с помощью этой последовательности зависимостей:

App -> myLib -> ModelModule

Таким образом, как app, так и myLib могут использовать ваши классы моделей. (Вам просто нужно иметь myLib в качестве зависимости от приложения и ModelModule в качестве зависимости от MyLib)

Другой простой способ — просто переместить ваши модели в myLib.

Комментарии:

1. Да, я пытался добавить модуль приложения в качестве зависимости от MyLib, но это предполагает, что модуль приложения не может быть зависимостью. Кроме того, это создаст неправильную циклическую зависимость. Я не могу переместить Person в MyLib, или новая библиотека для класса вызвала некоторые методы, определенные в MyApp. Я не могу переместить все, потому что для этого требуется много кода.

2. Всегда есть компромисс. Если вам нужен чистый код, вы должны заплатить за него 😉 если класс uset является классом модели данных, он не должен выполнять в нем никаких функций. Вы должны переместить весь слой модели. Другого чистого способа нет, поверьте мне