В этой статье поговорим про архитектуру программного обеспечения. Расскажем о том, что такое модель MVC, зачем нужен этот архитектурный паттерн в разработке, что такое контроллер в MVC и т. д. Постараемся объяснить все на примере и простыми словами.
Процесс взаимодействия пользователя и веб-сайта основан на постоянной обработке пользовательских запросов и выдаче соответствующих результатов. Любой интернет-сервис, будь то онлайн-кинотеатр, социальная сеть или интернет-банкинг, реагирует на действия пользователя довольно быстро. Чтобы обеспечить нужный уровень интерактивности и динамичности, в архитектуре ПО используют специальный паттерн под названием MVC. Что же такое модель MVC и в чем суть?
Немного теории
Модель MVC представляет собой шаблон программирования, позволяющий делить логику программного приложения на 3 части. Расшифровка аббревиатуры довольно проста:
- M — Model (Модель). Model получает данные от контроллера, осуществляет выполнение нужных операций, а потом передает данные во View;
- V — View (Вид, Представление). View получает данные от Model с последующим выводом их для пользователя;
- C — Controller (Контроллер). Контроллер в MVC — это блок, обрабатывающий действия пользователя и проверяющий полученную информацию, которая затем передается в Model.
Вот такой вот круговорот. Можно подумать, что все запутано, но на деле это не так.
Таким образом, модель MVC — это особый способ организации кода, предполагающий выделение блоков, каждый из которых будет отвечать за решение своих задач. Один отвечает за данные программного приложения, другой — за внешний вид, третий — за работу приложения. В этом контексте компоненты можно описать следующим образом:
- Модель — отвечает за данные, определяет структуру программного приложения;
- Представление — обеспечивает взаимодействие с пользователем. Определяет внешний вид программного приложения, а также способы его использования;
- Контроллер — это компонент, отвечающий в паттерне MVC за связь между Моделью и Представлением. Его код определяет, как веб-сайт реагирует на действия пользователя. Можно назвать этот блок мозгом приложения.
Контроллеры (controllers), Модели (models), Представления (views) в MVC — это все хорошо, но как лучше понять вышесказанную скучную теорию? Правильно, описать ее на абстрактном примере из реальной жизни. Пусть это будет заведение быстрого питания.
Паттерн MVC и магазин быстрого питания
Давайте представим, что мы пришли в кафе и хотим заказать бутерброд. На выбор есть сэндвичи с индейкой, ветчиной, тунцом. Не мудрствуя лукаво, выбираем индейку. Продавец за стойкой принимает заказ и сообщает на кухню, что приготовить. Повара, получив ваш запрос через продавца, выбирают нужные продукты и делают то, что вы хотите. В итоге вам приносят готовый продукт.
Как вся эта ситуация будет выглядеть в контексте паттерна MVC:
- Model — это кухня, где повара готовят вам сэндвич (там происходит обработка вашего запроса);
- View — это готовый сэндвич, который вы видите, держите в руках и с аппетитом кусаете;
- Controller — это продавец за стойкой, принимающий ваш запрос и передающий заказ на кухню.
Теперь представьте, что вы зашли в социальную сеть «ВКонтакте». Когда вы в качестве пользователя переходите по ссылке «Сообщества», вы автоматически отправляете запрос (вспоминаем продавца и Контроллер) с пожеланием открыть свои сообщества («хочу сэндвич с индейкой»). Ваш запрос обрабатывается на сервере (на кухне, то есть в Model), в результате чего из базы данных «достаются» сообщества, на которые вы подписаны. Все это происходит практически мгновенно — быстрее, чем в реальности готовят сэндвич. Итог — открывается соответствующая веб-страница, где отображается список всех ваших сообществ, то есть вы получаете свой сэндвич, он перед вами, вы его видите (View). Обратите внимание, что открывается именно страница (сэндвич) с сообществами (с индейкой), а не с друзьями (тунцом) или новостями (ветчиной).
Промежуточный итог:
- Продавец = Контроллер. Он хорошо знаком с меню и передает запросы на кухню;
- Кухня = Model. Повара знают, какие надо выбрать ингредиенты, что на каких полках лежит, как приготовить блюдо, чтобы результат соответствовал ожиданиям пользователя;
- Сэндвич = Представление. Это итоговый продукт, который пользователь сначала заказал, а потом получил.
Вывод прост и логичен: когда речь идет о функционировании сложной и большой системы, ее лучше разбить на модули. Именно для этого и существует вышеописанная модель разработки ПО.
Pattern в реальной разработке
С помощью вышеописанной архитектуры написан код ниже.
Controller
Служит для обработки входящих реквестов. В веб-фреймворке это может выглядеть как определение конкретных URL-адресов, на которые будет попадать пользователь в случае перехода по ссылке либо после нажатия кнопки на сайте:
Model
Отвечает за данные, хранимые и обрабатываемые на сервере.
View
Это уже HTML-шаблон, возвращаемый сервером после обработки реквеста. При корректной обработке вы получите нужную веб-страницу (в примере — это список друзей). Если что-то пойдет не так, результатом станет ошибка 404.
Каков профит?
Мы рассмотрели подход к проектированию и созданию программных приложений, предусматривающий выделение кода в такие компоненты, как Модель, Представление и Контроллер. Controller в паттерне MVC — это такой компонент, который служит для обработки входящих запросов. Модель извлекает из БД необходимую информацию. Представление определяет визуальный результат.
Основная цель следования таким принципам — разделение реализации бизнес-логики от ее визуализации. Это повышает возможности повторного применения кода, повышает его читаемость, упрощает написание программ, облегчает расширение и техническую поддержку системы в будущем.
Источники:
- https://ru.hexlet.io/blog/posts/chto-takoe-mvc-rasskazyvaem-prostymi-slovami;
- https://javarush.ru/groups/posts/2536-chastjh-7-znakomstvo-s-patternom-mvc-model-view-controller;
- https://skillbox.ru/media/code/chto_takoe_mvc_bazovye_kontseptsii_i_primer_prilozheniya/.
Также вам могут быть интересны следующие статьи с примерами реализации MVC на PHP: