Главные архитектурные паттерны в разработке
В настоящее время самой большой проблемой для iOS-разработчика является создание такого приложения, которое будет лаконично написано, весьма простым в поддержке, в написании тестов, должно легко масштабироваться. Поговорим о подходах в разработке, которые помогут достичь описанных выше целей.
Архитектурные паттерны (шаблоны проектирования)
Давайте сначала попробуем разобраться, что означает термин "Архитектурный паттерн".
Что это?
Шаблон проектирования или паттерн (англ. design pattern) в разработке программного обеспечения — повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Обычно шаблон не является законченным образцом, который может быть прямо преобразован в код; это лишь пример решения задачи, который можно использовать в различных ситуациях. Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться.
Информация из Википедии
Когда вы начинаете новый проект, вы должны быть готовыми потратить некоторое время на изучение шаблонов проектирования, которые обычно используются при создании похожих проектов. Не нужно лениться это делать, так как правильно подобранный подход создания и написания проекта с экономит тонны времени, возможно дни, которые в противном случае пришлось бы потратить на рефакторинг кода во время изменения или дополнения новых функций в программе.
Главные паттерны
Существует набор основных паттернов, которым следует придерживаться разработчикам при написании своих проектов. Не обязательно использовать только один из них, проект может содержать код написанный и структурированный с помощью разных подходов. Ведь каждый из них может быть лучшим решением для определенных задач.
Кратко рассмотрим главные паттерны, наиболее часто встречающиеся при разработке. Подробнее про каждый поговорим в отдельных статьях.
Model-View-Controller (MVC)
MVC является самым распространенным паттерном проектирования. Его можно встретить в различных приложениях и на различных языках программирования.
Первые iOS приложения были написаны с использованием данного подхода. У него есть как свои плюсы, так и свои минусы.
К плюсам можно отнести простоту реализации, из чего следует, что данный паттерн хорошо подходит для не больших программ, с не большим набором функционала.
К минусам относится разрастание Contorller'a, т.к. он реализует большинство функций приложения - работа с API, с базами данных, бизнес-логика приложения, и все это тесно связано с пользовательским интерфейсом, а в iOS разработке с UIKit - что означает, что для такого приложения сложно писать тесты.
Model-View-Presenter (MVP)
MVP появился, как одна из первых альтернатив MVC. Он отлично решает задачу разделения Controller'a и View.
В MVP есть новая сущность, которая зовется Presenter. Эта сущность содержит всю бизнес-логику приложения и независима от пользовательского интерфейса (UIKit). Роль вида в iOS исполняет ViewController, который содержит все UIKit компоненты, уведомляет Presenter об их изменениях.
Так как Presenter полностью отделен от View такой проект легко тестировать и поддерживать.
Model-View-ViewModel (MVVM)
MVVM очень похож на MVP, поскольку сущности практически одинаковы.
Вы можете считать MVVM улучшенной версией MVP благодаря связыванию (bindings) пользовательского интерфейса.
Связывание пользовательского интерфейса — это мост между View и ViewModel. Он может быть однонаправленный или двунаправленный — и позволяет этим двум сущностям взаимодействовать совершенно прозрачным образом.
Viper
Viper ялвляется реализацией Чистой архитектуры
Сила этого шаблона заключается в правильном распределении обязанностей по разным слоям. Таким образом, у вас есть небольшие слои, которые легко тестировать и с единственной ответственностью. Проблема с этим шаблоном заключается в том, что в большинстве сценариев он может быть излишним, поскольку вам нужно управлять множеством слоев, и это может быть запутанным и трудным в управлении.
Эту модель не легко освоить.