Команды от View в MVVM
Например, задача отобразить диалог выбора времени. В MVP было бы так:
- View говорит Presenter`у что пользователь нажал на кнопку "Выбора времени"
- Presenter отправил куда то команду "Открыть диалог выбора времени" (допустим в Activity отправляется команда)
- Диалог отображается (Выбираем время и выбранное время уходит в 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 уже реагируют по своему на полученные данные. (Показывют списки, лоадеры и любую другую реакцию)