Найти тему
iOS на практике

Model-View-ViewModel (MVVM) в iOS разработке

Оглавление

В ролике "Как стать iOS разработчиком с нуля?" я показывал свою дорожную карту становления разработчиком мобильных приложений.

Продолжим знакомство с этапами развития, описанными в дорожной карте.

Разберем подробнее шаблон проектирования на языке Swift - Model-View-ViewModel.

Как уже отмечалось ранее MVVM пришел на замену MVC для того чтобы облегчить процесс разработки сложных приложений, позволить отделить логические части проекта на разные объекты, отделить бизнес-логику от пользовательского интерфейса (View) и обложить все это качественным тестированием.

Вот что говорит Википедия о MVVM.

MVVM состоит из модели (Model), представления (View) или пользовательского интерфейса, и ViewModel - сущности, которая изолирована от пользовательского интерфейса, которая содержит всю бизнес-логику приложения, которая общается напрямую с моделью данных, и которая как-то должна влиять на View. Model в свою очередь, должна быть максимально простой и прозрачной. Она никак не связывается с представлением, а лишь делает свою работу по обработке данных (загрузка, созданение, изменение). Все входные данные приходят из ViewModel.

Ключевым моментом в создании MVVM является связывание (binding) пользовательского интерфейса (View) с логикой (ViewModel).

Связывание пользовательского интерфейса — это мост между View и ViewModel. Он может быть однонаправленный или двунаправленный и позволяет этим двум сущностям взаимодействовать совершенно прозрачным образом.

К сожалению, в iOS нет собственного способа добиться этого, поэтому вы должны использовать сторонние библиотеки/фреймворки или написать связывание самостоятельно.

Существуют разные способы реализовать привязку пользовательского интерфейса к коду Swift:

  • Delegation
  • Closures
  • RxSwift (ReactiveCocoa)

При помощи Делегирования (Delegation)

Если вы хотите избежать импорта и изучения новых фреймворков, вы можете использовать делегирование в качестве альтернативного способа для связывания View и ViewModel. К сожалению, используя этот подход, вы теряете силу прозрачной привязки, поскольку вам приходится делать привязку вручную. Эта версия MVVM становится очень похожей на MVP. Стратегия этого подхода заключается в сохранении ссылки на делегата, реализованного представлением, внутри вашей модели представления. Таким образом, ViewModel может обновлять представление, не имея ссылок на объекты UIKit.

При помощи Замыканий (Closures)

Это очень похоже на делегирование, но вместо делегата вы используете замыкания. Замыкания — это свойства ViewModel, и View использует их для обновления пользовательского интерфейса.

При помощи реактивного программирования и библиотеки RxSwift (ReactiveCocoa)

RxSwift — это Swift-версия семейства фреймворков ReactiveX. Освоив его, вы сможете легко переключаться на любой другой язык программирования где используется реактивное программирование - RxJava, RxJavascript и т. д.

Этот фреймворк позволяет вам писать код в стиле функционального реактивного программирования (FRP), а благодаря внутренней библиотеке RxCocoa вы можете легко связать View и ViewModel.

Подробнее с темой можно ознакомиться на моем сайте и в YouTube ролике.

😵 Если у тебя есть какие-то вопросы касательно iOS, разработки, или чего-то из видео - не вздумай стесняться и пиши в комментариях внизу! ⏬

😉 Если есть пожелания к тематике следующих видео, так же прошу в комментарии! ⏬

❗ И самое главное, прямо сейчас подпишись на канал ☝, и ставь палец вверх 👍! Если ты уже это сделал то вот тебе вкусный пирожок 🥟, и я в свою очередь, не разочарую тебя новым контентом.