Использование CLEAN архитектуры в Android с Parceler

Я использую работу над проектом в архитектуре CLEAN, где проект разбит на модули "Презентация", "Домен" и "Данные", где в модуле "Домен" размещены "Объекты", которые в основном представляют собой модели данных, специфичные для этого проект. Пример этой архитектуры здесь.

В отличие от двух других модулей, "Домен" является чистым модулем библиотеки Java, который отлично подходит для наглядности и тестирования, так как не имеет накладных расходов Android, однако это также означает, что я теперь не могу использовать библиотеки, такие как "Parceler" для которого очень специфичен для Android. Это можно обойти?

1 ответ

Решение

Parceler позволяет вам сконфигурировать bean-компоненты вне заданного модуля, чтобы генерировать Parcelable через @ParcelClass аннотаций. Это означает, что вы можете настроить данный компонент как @Parcel за пределами уровня данных и на уровне представления (или где угодно). См. Http://parceler.org/#classes_without_java_source для уточнения.

Модуль org.parceler:parceler-api также является чистой Java, он не зависит от API Android. Поэтому вы можете свободно комментировать свой модуль данных, не нарушая искомую архитектуру, которую вы ищете. Однако часть компилятора аннотаций (org.parceler: parceler) библиотеки опирается на Android API, поэтому вам нужно будет запустить ее в модуле, специфичном для Android. Это оставляет вам следующее:

  1. Включите библиотеку parceler-api в свой модуль данных и аннотируйте компоненты уровня данных (@Transient, @ParcelProperty, так далее). Если вам не нужна какая-либо конкретная конфигурация, вы можете избежать включения parceler-api в качестве зависимости.

  2. Добавьте библиотеки parceler и parceler-api в свой модуль для Android (презентация?).

  3. Добавить @ParcelClass аннотации с каждым классом из вашего модуля данных, который вы хотите быть @Parcel в произвольный класс (Application?). Это заставит Parceler создать Parcelable для каждого класса, указанного в @ParcelClass параметр.

Другие вопросы по тегам