[БЕЗ_ЗВУКА] Привет, в этом видео мы начнем изучать следующий MV-паттерн, а именно Model-View-Viewmodel. И давайте пройдемся по составляющим. Model точно так же, как и раньше, отвечает за данные, а также за методы получения, сохранения и обработки этих данных. View снова, точно так же, как и раньше, отвечает за визуальное представление данных. А вот ViewModel, новый компонент, это абстракция представления. Это слой между View и Model. Давайте разберемся, что это значит. Предположим, что у нас есть экран с TextView, в котором хранится имя пользователя. Экран — это View. А во ViewModel, обычный java-class, у нас хранится строковое поле. И если значение этого строкового поля равно "John Smith", то и текст внутри TextView тоже будет равен "John Smith". Вот и получается, что и ViewModel — это отражение текущего состояния экрана. Это абстракция View. Если немного поразмыслить над этим, то можно прийти к выводу, что View-модели не нужна View. И это действительно так. В ViewModel схема взаимодействия находится между View и моделью. ViewModel может вызывать методы модели. Она знает о ее существовании. Model, в свою очередь, про ViewModel не знает. Но она может рассылать уведомления об изменениях, на которые и подписана ViewModel. Что касается взаимодействия между View-моделью и View. ViewModel не может вызывать методы View, так как о ее существовании она не знает. ViewModel без разницы, связана ли с ней какая-то View или нет. ViewModel просто меняет свое состояние, меняет значение своих полей. С другой стороны, понятно, что View знает о ViewModel, так как View нужно передавать действия пользователя для обработки. Значит, View просто вызывает методы ViewModel. А как она получает данные? Для этого используется механизм связывания, data binding, по факту это тот же самый pattern observer. И изменения во ViewModel сразу же отражаются во View. В зависимости от реализации связывание также может быть двухсторонним. Тогда изменения во View тоже сразу отразятся во View-модели. Приведу простой пример. Предположим, что мы заполняем поле ввода пароля. Каждый новый введенный символ обновляет соответствующее поле во ViewModel, что в свою очередь дергает валидацию, проверяя, что пароль длиной больше восьми символов, среди которых есть одна цифра, одна строчная буква, один знак препинания, один китайский иероглиф, и в зависимости от всего этого во ViewModel меняется поле состояния ошибки, которое тут же подхватывает и отображает View или не отображает, если ошибки нет. Хорошо. С MVVM разобрались. В следующем видео разберем плюсы и минусы данного паттерна. [БЕЗ_ЗВУКА]