Вопрос
Я хочу добавить дополнительную функциональность в мой проект, основанный на Room
instantapp
, и я не уверен в наилучшей стратегии для этого.Следует ли предоставить дополнительные «действия» в рамках существующего модуля Feature A
или в рамках нового отдельного модуля Feature B
.Поскольку новый код будет зависеть от сущностей и POJO, уже определенных в Feature A
, могу ли я извлечь эти классы в модуль base
или мне нужно установить отдельный модуль database
для их хранения?
Фон (TL; DR)
Мое текущее понимание структуры проекта Android заключается в следующем.Android Studio генерирует примерно две структуры для новых приложений.
Традиционные / стандартные приложения создаются с помощью одного основного модуля, называемого просто app
, в который выдается весь их код.
Instant Приложения генерируют набор модулей app
, base
, FEATURE X
и instantapp
.(Примечание: это включается флажком «Включить поддержку Android Instant App» в форме «Целевые устройства Android»)
Эти модули организованы следующим образом:
base
- Содержит код и ресурсы, которые являются общими и используются совместно со всеми другими модулями, составляющими app
или instantapp
. feature A
- Служит «основным» пакетом / модулем, содержащим исходный код приложения.(Примечание. В настоящее время здесь находится весь код.) app
- Цель сборки для стандартного / традиционного приложения. instantapp
- Цель сборки для "instantapp"предоставлено проектом.
Каждый модуль наследует друг друга следующим образом (определяется из implementation ("MODULE")
строк в файлах сборки gradle).
base
|
V
Feature A
/ \
V V
app instantapp
Curiosities
Модуль base
base
предположительно генерирует файл AAR
.То есть он создает библиотеку Android, которую можно импортировать в другие модули.Из документации может показаться, что лучше импортировать такие модули, используя макрос api
в файле сборки gradle, но в стандартном файле сборки для Feature A
вместо этого используется макрос implementation
.Есть ли причина для этого?
Количество объектов на элемент
Другие структуры (например, Django) позволяют модулям Feature X
определять свои собственные объекты, которые включены вОсновная база данных, просто включив модуль.Можно ли это сделать с помощью расширений dagger или Kotlin (я ничего не знаю о dagger, но, похоже, он поддерживает внедрение зависимостей, которое может использоваться для этой цели)?