Существует множество шаблонов проектирования, таких как MVI, MVP, MVVM и т.д. Все они имеют свои преимущества и недостатки. В зависимости от размера вашего проекта, вы можете выбрать тот или другой. В этой статье я попытаюсь на примере объяснить шаблон проектирования VIPER. Также вы можете прочитать о других шаблонах проектирования архитектуры в другой моей статье здесь.
Прежде всего, я хочу немного рассказать о самомVIPER.
Что такое VIPER?
VIPER — это архитектура. Она снижает сложность, особенно в больших проектах. Целью архитектуры является разделение операционного кода внутри проекта, модуляризация и регуляризация. В основном она использует протоколы, поскольку межуровневая связь в шаблоне VIPER обеспечивается протоколами.
View
Это наш ViewController, и он отвечает за отображение данных пользователю. Здесь мы используем только данные от презентера. Никаких других действий не предпринимается.
Interactor
Можно сказать, что он действует как ViewModel в шаблоне проектирования MVVM. Это часть приложения, которое мы называем бизнес логикой. UI-операции здесь не выполняются. Здесь выполняются операции выборки, обновления, доступ к API и т.д.
Presenter
Это мост между View и Interactor. Этот уровень не должен содержать логических операций пользовательского интерфейса или бизнес-процессов.
Entity
Это модельная часть приложения. Модели данных, связанные с приложением, находятся здесь. Эта часть взаимодействует только с Interactor.
Router
Этот слой позволяет нам определить, когда отображаются страницы приложения. Маршрутизатор помогает связывать слои друг с другом. Мы описываем наши протоколы здесь.
Давайте посмотрим поближе. Я попытался объяснить VIPER с помощью простого iOS-приложения.
Пример VIPER
Во-первых, мы сделаем наше представление. Здесь вы можете увидеть кнопки операций, результат и текстовые поля ввода. Я использовал Storyboard, чтобы создать свое представление.
Протоколы являются важной частью в этой архитектуре. Я рассмотрю протоколы под двумя разными названиями: протоколы связи (carrier) и основные протоколы (main).
В этом приложении InteractorToPresenterProtocol и PresenterToViewProtocol являются нашими протоколами связи. Эти протоколы помогают нам переносить финальные данные, сформированные в интеракторе, от презентера к представлению. Вот почему мы назвали их InteractorToPresenter и PresenterToView.
ViewToPresenterProtocol и PresenterToInteractorProtocol являются основными протоколами, они включают в себя не только функции, но и свойства. Мы используем эти протоколы для отправки данных из представления в интерактор через презентер.
Нет необходимости определять переменные в протоколах связи. Они несут данные с помощью методов. Однако в основных протоколах нам нужно тригерить данные, определяя переменные.
Обратите внимание, что в тригерном классе должен быть объект из сработавшего класса.
Теперь мы создадим другие элементы VIPER: интерактор и презентер.
В роутере делаем авторизацию, позволяющую работать всем протоколам.
Обратите внимание, что у этой архитектуры также есть свои недостатки, такие как сложность ее использования в небольших проектах и большое количества папок и делегатов в проекте.
Но в целом мы завершили наше базовое приложение для iOS, используя шаблон проектирования VIPER. Вы можете получить доступ ко всему коду здесь.
Я надеюсь, что это было достаточно просто для вас, чтобы понять шаблон проектирования VIPER.
Еще про VIPER
- Viperit: шаблон для VIPER
- Мобильные архитектуры
- Разбор архитектуры VIPER на примере небольшого iOS приложения на Swift 4
- Начало работы с архитектурным шаблоном VIPER
- Шаблоны проектирования MVC, MVP, MVI, MVVM и VIPER
- VIPER и SwiftUI: Model layer
- Понимаем архитектуры iOS-приложений с помощью VIPER
- Как реализовать архитектуру VIPER в iOS-приложении с помощью Swift 5
- Что мы узнали, переключившись с MVC на VIPER