Команды от View в MVVM

Например, задача отобразить диалог выбора времени. В MVP было бы так:

  1. View говорит Presenter`у что пользователь нажал на кнопку "Выбора времени"
  2. Presenter отправил куда то команду "Открыть диалог выбора времени" (допустим в Activity отправляется команда)
  3. Диалог отображается (Выбираем время и выбранное время уходит в Presenter)

Как это происходит в MVVM(как правильно)?

  • View само внутри открывает диалог выбора времени и отправляет выбранное значение во ViewModel?

или

  • View отправляет команду во ViewModel, а там меняется какой то state на который подписано View и при смене state открывается диалог?

p.s. Все примеры паттерна MVVM построены только на отображении данных с какого то репозитория.. p.s.s. DataBinding не используется..


Ответы (1 шт):

Автор решения: Сергей Бувака

Вся разница между ViewModel и Presenter только лишь в том, что VM нано не знает о View которые на нее подписаны. Это означает, что в целом на VM может быть подписано сколько угодно View.

Второй момент заключается в том, что зачастую мы имеем Presenter на каждую View. С VM тактика немного другая. Обычно одна VM отвечает за один тип данных или за одну категорию данных. И соответственно в каждой View может быть несколько VM.

В остальном логика взаимодействия такая же как и с Presenter. View сообщает VM от каком-то событии. VM выполняет какую-то логику и отправляет всем своим подписчикам (View) событие о полученных данных. В свою очередь View уже реагируют по своему на полученные данные. (Показывют списки, лоадеры и любую другую реакцию)

→ Ссылка