Model-View-Controller (MVC) – это чрезвычайно мощный архитектурный паттерн для создания приложений под iOS. MVC является ответом на вопрос: «Как мне организовать код в iOS-приложении?»
Вы уже знаете объектно-ориентированное программирование (ООП). ООП организует ваш код Swift в классы, которые имеют свойства и функции.
Model-View-Controller построен на основе объектно-ориентированного программирования. Он структурирует поток данных и взаимодействие кода в вашем приложении. Если вы спрашиваете себя: «Как я должен передавать данные из одной части приложения в другую?», тогда Model-View-Controller – это то, что вам нужно.
Когда дело доходит до архитектурных паттернов, вы можете выбирать из множества дизайнов проектирования: Model-View-ViewModel (MVVM), Reactive Programming (RP) и Model-View-Whatever (MVW). SwiftUI также влияет на то, как мы используем MVC. И, конечно, вы также можете использовать другие паттерны разработки программного обеспечения, таких как делегирование и расширения.
В этой статье вы узнаете, как использовать Model-View-Controller (MVC) для лучшей структуризации вашего приложения и его данных. Многие из фреймворков Apple используют MVC, поэтому стоит приложить усилие, чтобы понять этот архитектурный паттерн и успешно использовать его в своей разработке.
Что такое Model-View-Controller (MVC)?
Давайте начнем с обмена сообщениями. Нет, не будем отправлять сообщения чата, мы будем отправлять сообщения из одной части приложения в другую.
«Сообщение» в разработке iOS – это просто имя метода и любые параметры, связанные с ним, которые вы отправляете экземпляру объекта.
dog.sit()
Мы посылаем сообщение sit() dog. Почему бы вам просто не назвать это «функцией» и «объектом»? Ну, функция и объект статичны – у них нет намерения. Вы должны четко понимать, что подразумевает вызов функции – передача информации.
Model-View-Controller – это не просто структура для множества функций и классов – это отправка сообщения. Если вы отправляете и получаете сообщения, вы автоматически отправляете и получаете данные.
rook.move(steps: 10, direction: .forward) rook.move(steps: 3, direction: .right)
В приведенном выше примере вы отправляете сообщения шахматной фигуре rook. Вы говорите ей сделать 10 шагов вперед и 3 шага вправо.
Model-View-Controller является программным архитектурным паттерном. Вы используете его, чтобы создать архитектуру для своего приложения, что-то вроде того, как архитектор проектирует здание, прежде чем его построит строитель.
Концепция Model-View-Controller описывает 3 компонента:
- Модель – обертка данных.
- Представление – представление пользовательского интерфейса (UI).
- Контроллер – посредник между моделью и представлением.
Вы используете эти 3 компонента вместе, чтобы структурировать свое приложение. Каждый компонент играет особую роль:
- Модель инкапсулирует конкретный набор данных, а также содержит логику для управления этими данными.
- Представление является объектом, который пользователь может видеть в пользовательском интерфейсе (UI).
- Контроллер контролирует всю логику между представлением и моделью. Он переносит сообщения между представлением, моделью и наоборот.
В разработке под iOS и, в частности в среде UIKit, вы, вероятно, уже работали с кучей моделей, представлений и контроллеров, не зная об этом.
К примеру:
- Объекты вроде UIButton, UIView и UILabel являются примерами представлений.
- Объекты вроде UIViewController, CLLocationManager и UINavigationController примеры контроллеров.
- При использовании Core Data SDK ваш файл .xcdatamodeld содержит модели вашего приложения. В Realm эти модели создаются как простые классы. В серверах Firebase и Parse эти модели представлены в виде объектов JSON.
Последняя часть Model-View-Controller – это поток данных.
Между 3 компонентами Model-View-Controller сообщения могут передаваться из одного компонента в другой.
Это происходит 4 способами:
- Представление информирует контроллер, когда происходит взаимодействие с пользователем.
- Контроллер обновляет представление при изменении данных.
- Контроллер обновляет модель при изменении данных.
- Модель уведомляет контроллер при изменении данных.
Почему вы должны использовать MVC?
Model-View-Controller – фундаментальная концепция в разработке под iOS. Многие платформы iOS, такие как UIKit, используют шаблон MVC для структурирования потока данных и обмена сообщениями.
Одной из ваших задач в качестве разработчика приложений является поддержка ваших приложений. Это означает, что вы должны документировать свой код, сохранять его кратким и читабельным и придерживаться определенной структуры.
Model-View-Controller – это структура, которая удерживает ваш код от превращения в одну большую кучу хаоса. Это первое и главное преимущество использования Model-View-Controller. Вы получаете более взвешенный подход к проектированию потока данных.
Вторая причина в том, что большинство разработчиков знают и понимают MVC. Когда вам нужно передать свой код другому разработчику или когда вы работаете вместе, это помогает наладить четкую коммуникацию. Использование стандартного MVC – это один из способов обеспечить беспроблемный переход и сотрудничество.
Третья причина использования MVC, которую часто упускают из виду, заключается в том, что она дает вам уверенность в качестве разработчика. Ваш код всегда будет хорошо структурирован, если вы используете Model-View-Controller. Model-View-Controller также увеличивает модульность вашего кода и помогает избежать его повторного использования.