Устройства отображения данных на уровне презентации - PullRequest
0 голосов
/ 06 ноября 2018

Я занимаюсь разработкой приложения для Android с использованием чистой архитектуры и читаю, что рекомендуется использовать разные объекты для каждого слоя. Но я делаю это в своем приложении, и я не уверен, должен ли я создавать сущности для каждого слоя (данные, домен и презентация) и картограф для каждого.

Я всегда использовал маппер и сущности для слоя данных и "отображал" эти объекты на java-объекты на доменном уровне и передавал эти объекты в презентацию, так как лучше всего это сделать? Я имею в виду, что лучше всего использовать в чистой архитектуре и отслеживать поток данных на уровне данных (например, получать данные из API) и, наконец, отображать эти данные в пользовательском интерфейсе.

Спасибо!

1 Ответ

0 голосов
/ 16 ноября 2018

ОК, давайте начнем с простого сценария использования «Извлечь информацию о пользователе», бизнес-требования указывают, что вы должны попытаться получить свежие данные из API, если это невозможно, получить данные из вашего кэша, если таковые имеются.

  • Уровень представления обычно выполняет FetchUserInfoUseCase и ожидает получения класса данных UserInfo, теперь мы вошли в слой данных .
  • Вариант использования FetchUserInfo будет использовать UserRepository для запроса этого объекта данных.
  • UserRepository попытается использовать UserRemoteDataSource, а при сбое откатится на использование UserLocalDataSource.
  • И UserRemoteDataSource, и UserLocalDataSource возвращают UserInfo класс данных.
  • Теперь перейдем к реальным реализациям локальных и удаленных источников, войдя в слой домена , в реальной жизни они могут быть Retrofit для удаленных и, возможно, Room для локальных.
  • Допустим, удаленный источник данных будет извлекать данные, используя Retrofit, который в основном будет возвращать объект POJO Gson в качестве объекта домена, это нужно будет сопоставить с объектом UserInfo, для этого мы будем нужен картер.
  • То же самое относится и к локальному источнику данных, в случае Room, это сущность домена базы данных, которая также должна быть сопоставлена ​​с нашим UserInfo классом данных, поэтому еще один преобразователь.
  • До сих пор оба источника данных будут возвращать объединенный объект данных UserInfo и сообщать о нем обратно на слой данных UserRepository, который, в свою очередь, отчитывается обратно в FetchUserInfoUseCase, который сообщит обратно на уровень представления .
  • Тогда уровень представления может отобразить этот UserInfo класс объекта данных в более простую версию пользовательского интерфейса для передачи в представление, скажем, UserInfoViewModel объект представления.

Надеюсь, это немного прояснит ситуацию.

...