Доменный модуль и AutoValue для Android CleanArchitecture


Я хочу использовать чистую архитектуру в новом приложении, и до сих пор она отлично работает. Я структурировал приложение на 3 модуля (презентация, данные и домен), как в следующем примере: Android-CleanArchitecture

В моем доменном модуле есть некоторые сущности. Один из них-пользователь.

    public class User {

        private String name;

        public String name () {
            return name;
        }

        public static class Builder {
            ...
        }
    }

Я хочу использовать AutoValue с некоторыми расширениями, чтобы избавиться от шаблонного кода. Одним из расширений посылку AutoValue. Теперь мне нужно внедрить андроида.ос.Parceable интерфейс, который является частью android и не может быть использован в модуле my domain, потому что это зависимость от Android.

Как правильно это реализовать?

1 2

1 ответ:

Реализовать идеал понятной архитектуры немного сложно с Android, так как Android-это целый фреймворк, который имеет свою спецификацию, даже на базовом уровне языка.

Я думаю, как идеал конкретных инструментов свободного уровня в основном для целей тестирования, таким образом-это должно быть главной целью в виду, когда дело касается Android.

Что касается самого Parcelable , считайте, что он просто добавляет дополнительные методы для объекта модели, чтобы ОС Android могла сериализация / десериализация данных между различными компонентами системы. Так как ваши тесты на уровне домена не выполняются ОС Android, они не должны касаться этих методов, и это не повлияет на ваши тесты.

Рассмотрим несколько других API в Android, которые недоступны в модульном тесте, например Uri, DateUtils, SparseArray и многое другое...
Вот где я думаю, что Roboelectricможет пригодиться, с издевательством над этими примитивными андроидами.

Сказав Все это... при четкой архитектуре ваш доменный уровень должен быть отделен от уровня представления, поэтому в основном вы будете иметь объекты модели вобоих слоях (которые могут совместно использовать интерфейс), и оба они могут использовать AutoValue, но только на уровне представления вы можете реализовать интерфейс Parcelable (которые являются теми, которые нуждаются в нем, так как на этом уровне вы будете взаимодействовать с системой и использовать Parcel). Отсутствие андроидных зависимостей на уровне домена не является единственным соображением для такого разделения, имейте в виду, этот уровень представления может добавить информацию, не относящуюся к уровню домена.