Репозиторий должен действовать только как ваш шлюз для доступа к данным из разных источников данных.
Например
Если вы можете получать пользовательские данные как из API, так и с диска (кэшированные данные), вы изолируете логику решения о выборе источника данных в классе Repository. Ведущий не должен ничего знать об этом. Докладчик запрашивает только данные пользователя
При этом
Презентатор должен хранить ссылку на данные, которые он запрашивает (т. Е. UserModel), репо получает данные только из любого источника данных и все. То же самое относится к любым операциям с данными (сохранение, удаление, обновление, получение и т. Д.). Поэтому, если вам нужно хранить ссылку на область приложения для вашего объекта данных, создайте отдельный класс, скажем, с именем InMemoryStore
, отметьте его как область приложения и сохраните в нем ссылки. Используйте шаблон Repository для запроса данных из него.
Также важно отметить
Каждый слой должен содержать различную форму данных.
Модель, используемая в слое представления (то есть представление рециркулятора), должна содержать только данные, необходимые для представления, не более того, не менее того.
То же самое касается докладчика и слоя модели (обычно слой модели содержит большую часть информации о модели)
Это означает, что вам потребуется класс сопоставления для каждого класса модели для преобразования из одной формы в другую. Вы можете обратиться к этому примеру для лучшего понимания
Наконец
Поскольку я использую RxJava, я не чувствовал необходимости использовать LiveData, поэтому я недостаточно осведомлен об этой теме.
Вы можете проверить этот полный пример , чтобы узнать, как применить MVP с RxJava и Dagger
Надеюсь, это было полезно и понятно :) 1036 *