Комната: Добавление дополнительных пакетов функций / модулей - PullRequest
0 голосов
/ 01 декабря 2018

Вопрос

Я хочу добавить дополнительную функциональность в мой проект, основанный на 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, но, похоже, он поддерживает внедрение зависимостей, которое может использоваться для этой цели)?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Оказывается, я мог бы извлечь все в модуль base без создания выделенного модуля database.Это новый проект, поэтому не было необходимости создавать отдельный модуль исключительно для базы данных, как это было предложено Анкитом Тхакуром, которого я отметил как ответившего на вопрос.Моя структура теперь выглядит следующим образом:

      base
     /    \
feature  feature
     \    /
 app/instantapp

С base, обеспечивающим классы database, queryset, entities, а также классы repository.Каждая функция обрабатывает классы model и activity вместе с любыми fragments и adapters.

Подводные камни

Один snafoo при передаче классов черезоригинальная особенность модулей base состоит в том, что в то время как модуль feature импортировал Kotlin, базовый модуль этого не сделал.поэтому я просто создал файл kotlin в базовом модуле, а затем IDe поднял его, добавив поддержку kotlin в файл base gradle, и добавил следующую строку в разделе зависимостей файла сборки gradle.

dependecnies { ... 
   implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
... }

Модуль base

В настоящее время не имеет значения, включен ли базовый модуль в макрос implementation или api.Я оставил значение по умолчанию implementation(":base").

Количество объектов на элемент

Через некоторое время я добавлю это в другой вопрос (или ссылку на любые существующие вопросы, которые янайти).

0 голосов
/ 03 декабря 2018

Я всегда предпочитаю централизовать базу данных как отдельный модуль.Так что любой может использовать таблицы базы данных, а также они будут потеряны пару, это означает, что если кто-то ранее использовал sqlite и хочет перейти на RoomDatabase, то может изменить только 1 модуль, а все остальные модули не тронуты. Вот 1 пример архитектуры.https://github.com/ankitthakur/MobileSecurity-Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...