VIPER
Суть
VIPER — развитие MVP в духе Clean Architecture для UIKit: экран (модуль) делится на пять ролей с протоколами между ними.
- View —
UIViewController, пассивная: показывает готовые к отображению данные (строки, а не модели) и передаёт события Presenter'у. - Interactor — use case-логика модуля: «загрузить заказы», «оплатить». Данные получает через сервисы/репозитории, сам в сеть не ходит.
- Presenter — связывает всех: принимает события View, зовёт Interactor и Router, превращает Entity в view-модели для View.
- Entity — простые модели данных (
struct). - Router (Wireframe) — навигация и сборка следующего модуля.
Плюс обычно есть Assembly/Builder, который создаёт все части и связывает ссылки: View владеет Presenter'ом, Presenter — Interactor'ом и Router'ом; обратные ссылки (presenter.view, interactor.output, router.viewController) — weak.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep