Возрождение MVC // what if it’s not that bad?
Булат Хабиров, iOS разработчик, Uvee Studio
Что такое Apple MVC?
• Model-View-Controller
• Model — работа с данными (структура и т.д.)
• Controller — дает данные из Model во View, реагирует на действия пользователя
• View — отображает данные, отвечает за расстановку объектов на экране
Что будет если не задумываться об архитектуре?
• View практически ничего не делает
• Вся логика приложения копится во ViewController
• Сложно ориентироваться в проекте
• Сложно дебажить/вносить правки
• Практически невозможно тестировать
больше тысячи строк!
Что такое хорошая архитектура?
• Обязанности хорошо распределены между сущностями, которые имеют определенные роли
• Удобно тестировать
• Несложная реализация
• Простое обслуживание проекта в дальнейшем
Какой паттерн тогда выбрать?
Apple издевается? (нет)
MVC: а что если?
• View != ViewController
• Стиль и расстановка должны быть во View
• ViewController использует loadView()
• ViewController передает данные для отображения во View, берет их из Model
• View делегирует события пользователя к ViewController
DEMO
Что мы получили
• Разгрузили ViewController путем непосредственного использования View
• Логику работы с Model (получение/обработка данных) можно выносить в дополнительные классы/структуры — это не нарушит паттерн
• Названия сущностей действительно соответствуют их обязанностям
• Без долгого продумывания модулей (VIPER)
• Без сторонних библиотек (rxSwift, PromiseKit)
Что дальше?
• Богдан Орлов, Badoo: iOS Architecture Patterns
• Официальная документация Apple по Model-View-Controller design pattern
• UIViewController class reference
• UIView class reference
• Относительно новый паттерн, набирающий популярность на GitHub — applepride.github.io/PIDOR/