Журнал / польза

Что такое концепция Model, View, Controller и как она работает

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

Что такое MVC

Концепция MVC сформулировал Трюгве Реенскауг в компании Xerox PARC еще в 1978 году — хотя компьютеры были большими, а программисты считались редкими специалистами. Но уже тогда разработчики думали о том, как помочь пользователю управлять компьютерной системой интуитивно понятным способом.

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

— Код модели Model хранит данные и связанную с ними логику, а также закрепляет структуру приложения. Например, если программист создаёт приложение для списка дел, код модели будет по шаблону определять основные компоненты приложения: что такое «задача» и что такое «список».

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

— Код контроллера, Controller, связывает модель и представление. Он получает на вход пользовательский ввод, интерпретирует его и информирует о необходимых изменениях. Например, отправляет команды для обновления состояния, такие как сохранение документа. В приложении со списком дел контроллер определяет, как пользователь добавляет задачу или помечает ее как выполненную.

Разбираем MVC на примере ресторана

Представьте, что вы идете в ресторан. Заказ у вас принимает официант. Он не разбирается в особенностях приготовления блюд, ничего не знает о вас, и даже не вчитывается в названия — просто записывает всё, чтобы передать дальше, на кухню. Так же работает контроллер в MVC.

Затем официант отправляется на кухню, где его ждёт повар. Тот принимает заказ, отбирает ингредиенты, которые нужны для его приготовления, и начинает работу. Кухня — это модель. А готовое блюдо — будет представлением.

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

У одного приложения может быть несколько внешних видов. Например, в веб-приложениях десктопные и мобильные версии — это варианты интерфейса для одной и той же модели.

Зачем использовать паттерн MVC

Он позволяет писать независимые друг от друга блоки кода. Их можно менять отдельно, не затрагивая остальные. Так можно облегчить себе работу, разрабатывая только один программный компонент — независимо от остальных. Например, переписывать способ отображения данных, не трогая способ их обработки.

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

Вместо заключения

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