MVVM состоит из следующих частей:
• Model представляет собой данные, которые необходимо показать пользователю. В большинстве Android-приложений моделью выступает слой, отвечающий за получение данных с бэкэнда.
• View – это класс, отвечающий за отображение данных. В Android-приложениях View – это обычно Activity или Fragment.
• ViewModel – класс, который соединяет View и Model. ViewModel подписана на обновления Model, а View подписана на обновления ViewModel. При этом ViewModel не имеет явной сслыки на View. Подписки реализуются через паттерн Observer.
ViewModel представляет собой маппинг данных, которые отображаются на View.
Допустим, пользователь вводит текст в поле ввода сообщения в приложении-мессенджере и нажимает "Отправить". View изменяет ViewModel. ViewModel выставляет атрибут
isMessageRead
в значение false
и обновляет Model. В нашем примере Model – это абстракция для слоя взаимодействия с бэкендом. Обновление модели значит отправка запроса с введенным сообщением.Далее собеседник читает сообщение. Model обновляется по сети (например приходит сигнал по сокет-соединению). ViewModel получает оповещение об обновлении Model и обновляет себя, меняя значение атрибута
isMessageRead
на true
. View наблюдает обновление ViewModel и отрисовывает изменение.