В этой статье поговорим про архитектуру программного обеспечения. Расскажем о том, что такое модель MVC, зачем нужен этот архитектурный паттерн в разработке, что такое контроллер в MVC и т. д. Постараемся объяснить все на примере и простыми словами.

Процесс взаимодействия пользователя и веб-сайта основан на постоянной обработке пользовательских запросов и выдаче соответствующих результатов. Любой интернет-сервис, будь то онлайн-кинотеатр, социальная сеть или интернет-банкинг, реагирует на действия пользователя довольно быстро. Чтобы обеспечить нужный уровень интерактивности и динамичности, в архитектуре ПО используют специальный паттерн под названием MVC. Что же такое модель MVC и в чем суть?

Немного теории

Модель MVC представляет собой шаблон программирования, позволяющий делить логику программного приложения на 3 части. Расшифровка аббревиатуры довольно проста:

  • M — Model (Модель). Model получает данные от контроллера, осуществляет выполнение нужных операций, а потом передает данные во View;
  • V — View (Вид, Представление). View получает данные от Model с последующим выводом их для пользователя;
  • C — Controller (Контроллер). Контроллер в MVC — это блок, обрабатывающий действия пользователя и проверяющий полученную информацию, которая затем передается в Model.

Вот такой вот круговорот. Можно подумать, что все запутано, но на деле это не так.

Что такое модель MVC?

Таким образом, модель MVC — это особый способ организации кода, предполагающий выделение блоков, каждый из которых будет отвечать за решение своих задач. Один отвечает за данные программного приложения, другой — за внешний вид, третий — за работу приложения. В этом контексте компоненты можно описать следующим образом:

  • Модель — отвечает за данные, определяет структуру программного приложения;
  • Представление — обеспечивает взаимодействие с пользователем. Определяет внешний вид программного приложения, а также способы его использования;
  • Контроллер — это компонент, отвечающий в паттерне MVC за связь между Моделью и Представлением. Его код определяет, как веб-сайт реагирует на действия пользователя. Можно назвать этот блок мозгом приложения.

Контроллеры (controllers), Модели (models), Представления (views) в MVC — это все хорошо, но как лучше понять вышесказанную скучную теорию? Правильно, описать ее на абстрактном примере из реальной жизни. Пусть это будет заведение быстрого питания.

Что такое модель MVC?

Паттерн MVC и магазин быстрого питания

Давайте представим, что мы пришли в кафе и хотим заказать бутерброд. На выбор есть сэндвичи с индейкой, ветчиной, тунцом. Не мудрствуя лукаво, выбираем индейку. Продавец за стойкой принимает заказ и сообщает на кухню, что приготовить. Повара, получив ваш запрос через продавца, выбирают нужные продукты и делают то, что вы хотите. В итоге вам приносят готовый продукт.

Как вся эта ситуация будет выглядеть в контексте паттерна MVC:

  • Model — это кухня, где повара готовят вам сэндвич (там происходит обработка вашего запроса);
  • View — это готовый сэндвич, который вы видите, держите в руках и с аппетитом кусаете;
  • Controller — это продавец за стойкой, принимающий ваш запрос и передающий заказ на кухню.
Что такое модель MVC?

Теперь представьте, что вы зашли в социальную сеть «ВКонтакте». Когда вы в качестве пользователя переходите по ссылке «Сообщества», вы автоматически отправляете запрос (вспоминаем продавца и Контроллер) с пожеланием открыть свои сообщества («хочу сэндвич с индейкой»). Ваш запрос обрабатывается на сервере (на кухне, то есть в Model), в результате чего из базы данных «достаются» сообщества, на которые вы подписаны. Все это происходит практически мгновенно — быстрее, чем в реальности готовят сэндвич. Итог — открывается соответствующая веб-страница, где отображается список всех ваших сообществ, то есть вы получаете свой сэндвич, он перед вами, вы его видите (View). Обратите внимание, что открывается именно страница (сэндвич) с сообществами (с индейкой), а не с друзьями (тунцом) или новостями (ветчиной).

Промежуточный итог:

  • Продавец = Контроллер. Он хорошо знаком с меню и передает запросы на кухню;
  • Кухня = Model. Повара знают, какие надо выбрать ингредиенты, что на каких полках лежит, как приготовить блюдо, чтобы результат соответствовал ожиданиям пользователя;
  • Сэндвич = Представление. Это итоговый продукт, который пользователь сначала заказал, а потом получил.
Что такое модель MVC?

Вывод прост и логичен: когда речь идет о функционировании сложной и большой системы, ее лучше разбить на модули. Именно для этого и существует вышеописанная модель разработки ПО.

Pattern в реальной разработке

С помощью вышеописанной архитектуры написан код ниже.

Controller

Служит для обработки входящих реквестов. В веб-фреймворке это может выглядеть как определение конкретных URL-адресов, на которые будет попадать пользователь в случае перехода по ссылке либо после нажатия кнопки на сайте:

Что такое модель MVC?

Model

Отвечает за данные, хранимые и обрабатываемые на сервере.

Что такое модель MVC?

View

Это уже HTML-шаблон, возвращаемый сервером после обработки реквеста. При корректной обработке вы получите нужную веб-страницу (в примере — это список друзей). Если что-то пойдет не так, результатом станет ошибка 404.

Что такое модель MVC?

Каков профит?

Мы рассмотрели подход к проектированию и созданию программных приложений, предусматривающий выделение кода в такие компоненты, как Модель, Представление и Контроллер. 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: