Подтвердить что ты не робот

Android MVP: что такое Interactor?

Что такое Interactor? Как он соответствует дизайну MVP? Каковы преимущества/недостатки использования интерактора или помещения кода-посредника в презентаторе?

4b9b3361

Ответ 1

MVP существует для решения проблемы Божественной Активности (Активность/Фрагмент, который содержит слишком много строк).

Хотя это и не было обязательным (вы можете кодировать по любому шаблону), многие разработчики согласны с тем, что MVP подходит для Android. Это делает ваш исходный код более чистым, тестируемым, обслуживаемым и надежным.

Вы можете думать об интеракторе как о своей "модели/контроллере". Интерактор будет получать данные из вашей базы данных, веб-сервисов или любого другого источника данных. После получения данных интерактор отправит данные докладчику. Таким образом, внесение изменений в ваш пользовательский интерфейс.

Преимущества использования интерактора в отдельном классе состоят в том, что он отделит ваш класс, что сделает его более чистым и тестируемым. Конечно, вы можете поместить интерактор во внутренний класс докладчика, но какой в этом смысл? Недостатки использования интерактора в вашем докладчике заключаются в том, что он сделает ваш докладчик более обширным и относительно сложным для чтения и управления.

Обновление: Конечно, это просто упрощение, если вы хотите копнуть глубже, вы можете увидеть блог fernando cejas или блог antonio leiva

Ответ 2

Interactor - это класс, который отделяет слой домена от уровня представления. Проще говоря, он обеспечивает способ написания бизнес-логики отдельно от кода, который используется для управления пользовательским интерфейсом (путем привязки данных к пользовательскому интерфейсу/анимации/навигации).

Таким образом, Interactor является посредником между Presenter/ViewModel и шаблоном Repository.

Я не использовал шаблон Interactor в MVP, но я использовал его в MVVM. Interactor может быть взаимозаменяемо использован для UseCases.

Например, давайте возьмем случай использования категорий для отображения в списке (в приведенном ниже примере Presenter представляет MVP, а ViewModel представляет шаблон MVVM).

  • View (Activity/Fragment) вызовет метод Presenter/ViewModel для получения categoryList.
  • Затем Presenter/ViewModel вызовет метод интерактора для получения categoryList
  • Interactor вызовет метод Repository (CategoryRepository) для получения categoryList
  • Хранилище будет иметь логику, чтобы решать, получать ли категории из веб-службы (удаленный источник данных), из хранилища БД (локальный источник данных) или из кэша (временное хранилище - может быть переменной в классе хранилища).
  • Репозиторий вернет categoryList (выбирается из выбранного источника данных) в Interactor
  • Interactor будет либо обрабатывать список категорий (некоторое форматирование и т.д.) И отправлять его в Presenter/ViewModel. Interactor может напрямую отправить список в Presenter/ViewModel, если обработка не требуется
  • Presenter/ViewModel вызовет метод View с categoryList в качестве параметра
  • Вид покажет категорию List с или без анимации

Обратите внимание, что в этом процессе можно избежать Interactor, поэтому вместо использования потока данных, подобного этому Repository-> Interactor-> Presenter/ViewModel, связь может быть осуществлена с помощью Repository-> Presenter/ViewModel таким образом. Здесь Presenter/ViewModel будет частью презентации, а также слоя домена. Как я уже говорил выше, Interactor действует как разделитель этих двух слоев.

Это несколько кратко написанных блогов, объясняющих эту концепцию для справки.

Я надеюсь, что это поможет вам лучше понять роль Interactor. Удачного кодирования !!!

Ответ 3

Interactor содержит прецеденты приложения, что означает, что он будет содержать все реализации для бизнес-домена проекта.

Вот очень хорошо организованная статья о Архитектура Android-приложений с использованием шаблона MVP., которую я настоятельно рекомендую вам изучить.

Также я создал приложение для Android с именем JuicyInsta, используя шаблон MVP и API Instagram, который делится здесь на github.

Ответ 4

Лично я использую View, Present и Interactor, который для меня отличается от модели.

Вы можете подумать о Interactor как классе с полезными методами для извлечения данных из базы данных, сервера и т.д.. После того, как вы получите данные, вы можете заполнить свою модель в Interactor и вернуть ее в презентацию.

например. У вас может быть LoginInteractor, который создает Asynctask для аутентификации пользователя, а затем заполняет UserModel полученными данными.