В чем отличие VIPER от Clean Architecture
Что проверяют
Отличаете ли вы принцип от конкретного шаблона. Это вопрос на архитектурную зрелость, а не на знание букв в аббревиатуре.
Как отвечать
Clean Architecture это принцип организации кода: слои и правило зависимостей. Внутри сущности и сценарии использования, снаружи интерфейс, база, сеть, а зависимости направлены только внутрь. Внешние слои знают о внутренних, внутренние о внешних не знают, связь идёт через абстракции. К платформе и к экранам это не привязано.
VIPER это конкретный шаблон организации одного экрана в iOS: View, Interactor, Presenter, Entity, Router. Он предписывает набор классов и связей на модуль, тогда как Clean Architecture говорит только про направление зависимостей.
Как их сопоставляют:
- VIPER можно считать одной из реализаций идей Clean на уровне экрана: Interactor берёт на себя роль сценария использования, Entity это модель, View и Router это внешний слой;
- Clean Architecture в чистом виде добавляет явные сценарии использования и репозитории, живущие независимо от экранов, и их переиспользуют несколько модулей;
- в VIPER Interactor часто оказывается смесью бизнес-логики и доступа к данным, и это главное расхождение с Clean, где эти роли разделены;
- Router это чисто платформенная деталь iOS, в Clean такого понятия нет вовсе.
Практический вывод: их не выбирают друг вместо друга. На практике берут слои по Clean для домена и любой шаблон представления сверху, будь то VIPER, MVVM или The Composable Architecture.
Где спотыкаются
Сравнивают как равные варианты, хотя это разные уровни: принцип и шаблон модуля.
Называют слои Clean, но не могут объяснить правило зависимостей, ради которого всё и затевалось.
Приносят VIPER в маленькое приложение и получают пять файлов на экран без выигрыша.