Доменный модуль и 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 ответ:
Реализовать идеал понятной архитектуры немного сложно с Android, так как Android-это целый фреймворк, который имеет свою спецификацию, даже на базовом уровне языка.
Я думаю, как идеал конкретных инструментов свободного уровня в основном для целей тестирования, таким образом-это должно быть главной целью в виду, когда дело касается Android.
Что касается самого Parcelable , считайте, что он просто добавляет дополнительные методы для объекта модели, чтобы ОС Android могла сериализация / десериализация данных между различными компонентами системы. Так как ваши тесты на уровне домена не выполняются ОС Android, они не должны касаться этих методов, и это не повлияет на ваши тесты.
Рассмотрим несколько других API в Android, которые недоступны в модульном тесте, например Uri, DateUtils, SparseArray и многое другое...
Вот где я думаю, чтоRoboelectric
может пригодиться, с издевательством над этими примитивными андроидами.Сказав Все это... при четкой архитектуре ваш доменный уровень должен быть отделен от уровня представления, поэтому в основном вы будете иметь объекты модели вобоих слоях (которые могут совместно использовать интерфейс), и оба они могут использовать
AutoValue
, но только на уровне представления вы можете реализовать интерфейсParcelable
(которые являются теми, которые нуждаются в нем, так как на этом уровне вы будете взаимодействовать с системой и использоватьParcel
). Отсутствие андроидных зависимостей на уровне домена не является единственным соображением для такого разделения, имейте в виду, этот уровень представления может добавить информацию, не относящуюся к уровню домена.