Перейти к содержимому

Что такое контроллер в программировании

  • автор:

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

В этой статье поговорим про архитектуру программного обеспечения. Расскажем о том, что такое модель 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:

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

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

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

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

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

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

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:

  • «Модель проектирования MVC — что это? PHP и MVC »;
  • «Пример шаблона проектирования MVC в PHP ».

Что такое MVC: базовые концепции и пример приложения

Объясняем, что такое паттерн MVC и как он помогает упростить разработку.

Евгений Кучерявый

Евгений Кучерявый

Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.

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

  • Model (модель). Получает данные от контроллера, выполняет необходимые операции и передаёт их в вид.
  • View (вид или представление). Получает данные от модели и выводит их для пользователя.
  • Controller (контроллер). Обрабатывает действия пользователя, проверяет полученные данные и передаёт их модели.

Может показаться, что это что-то запутанное, но на самом деле всё просто.

Как работает MVC

Лучше всего понять концепцию MVC можно на реальном примере — ресторане с фастфудом. В нём посетители (пользователи) подходят к кассиру (одновременно вид и контроллер), видят меню и заказывают какое-нибудь блюдо.

Кассир проверяет, всё ли в порядке с заказом, и после оплаты передаёт нужные данные повару (модель). Повар готовит заказанное блюдо, хотя понятия не имеет о том, как выглядит посетитель, оплатил ли он заказ и так далее.

Когда модель закончит свою работу, она отправит результат в вид — обратно кассиру, который, в свою очередь, отдаст готовое блюдо посетителю.

Если же говорить о приложениях, то компоненты будут следующие:

  • Вид — интерфейс.
  • Контроллер — обработчик событий, инициируемых пользователем (нажатие на кнопку, переход по ссылке, отправка формы).
  • Модель — метод, который запускается обработчиком и выполняет все основные операции (получение записей из базы данных, проведение вычислений).

Стоит также отметить, что реализация паттерна MVC может отличаться в зависимости от задачи. Например, в веб-разработке модель и вид взаимодействуют друг с другом через контроллер (как в примере с рестораном), а в приложениях модель может сама уведомлять вид, что нужно что-то изменить.

Зачем программистам нужен MVC

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

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

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

Практика: пишем
MVC-приложение

Чтобы лучше вникнуть в этот паттерн, стоит применить его на практике. Для этого создайте WPF-приложение и сверстайте такую форму:

Заключение

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

Читайте также:

  • Как работает .NET и зачем он нужен
  • GNU Emacs: как текстовый редактор из 1980-х учит программистов ценить свободное ПО
  • Перечисления в C#: как правильно использовать enum

Контроллеры

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

При использовании контроллеров существуют некоторые условности. Так, по соглашениям об именовании названия контроллеров должны оканчиваться на суффикс «Controller», остальная же часть до этого префикса считается именем контроллера.

Чтобы обратиться контроллеру из веб-браузера, нам надо в адресной строке набрать адрес_сайта/Имя_контроллера/ . Так, по запросу адрес_сайта/Home/ система маршрутизации по умолчанию вызовет метод Index контроллера HomeController для обработки входящего запроса. Если мы хотим отправить запрос к конкретному методу контроллера, то нужно указывать этот метод явно: адрес_сайта/Имя_контроллера/Метод_контроллера , например, адрес_сайта/Home/Buy — обращение к методу Buy контроллера HomeController.

Контроллер представляет обычный класс, который наследуется от базового класса System.Web.Mvc.Controller . В свою очередь класс Controller реализует абстрактный базовый класс ControllerBase, а через него и интерфейс IController . Таким образом, формально, чтобы создать свой класс контроллера, достаточно создать класс, реализующий интерфейс IController и имеющий в имени суффикс Controller.

Интерфейс IController определяет один единственный метод Execute, который отвечает за обработку контекста запроса:

public interface IController

Теперь создадим какой-нибудь простенький контроллер, реализующий данный интерфейс. В качестве проекта мы можем взять проект из предыдущий главы. Итак, добавим в папку Controllers проекта новый класс (именно класс, а не контроллер) со следующим содержанием:

using System.Web.Mvc; using System.Web.Routing; namespace BookStore.Controllers < public class MyController : IController < public void Execute(RequestContext requestContext) < string ip = requestContext.HttpContext.Request.UserHostAddress; var response = requestContext.HttpContext.Response; response.Write("

Ваш IP-адрес: " + ip + "

"); > > >

При обращении к любому контроллеру система передает в него контекст запроса. В этот контекст запроса включается все: куки, отправленные данные форм, строки запроса, идентификационные данные пользователя и т.д. Реализация интерфейса IController позволяет получить этот контекст запроса в методе Execute через параметр RequestContext . В нашем случае мы получаем IP-адрес пользователя через свойство requestContext.HttpContext.Request.UserHostAddress .

Кроме того, мы можем отправить пользователю ответ с помощью объекта Response и его метода Write.

Таким образом, перейдя по пути адрес_сайта/My/ , пользователь увидит свой ip-адрес.

Хотя с помощью реализации интерфейса IController очень просто создавать контроллеры, но в реальности чаще оперируют более высокоуровневыми классами, как например класс Controller, поскольку он предоставляет более мощные средства для обработки запросов. И если при реализации интерфейса IController мы имеем дело с одним методом Execute, и все запросы к этому контроллеру, будут обрабатываться только одним методом, то при наследовании класса Controller мы можем создавать множество методов действий, которые будут отвечать за обработку входящих запросов, и возвращать различные результаты действий.

Чтобы создать стандартный контроллер, мы можем также добавить в папку Controllers простой класс и унаследовать от класса Controller, например:

using System.Web.Mvc; namespace BookStore.Controllers < public class BookShopController : Controller < public ActionResult Index() < return View(); >> >

Что такое контроллер в программировании

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

«IT-специалист с нуля» наш лучший курс для старта в IT

схема MVC-приложения, архитектура

Модель (Model) Это основная логика приложения. Отвечает за данные, методы работы с ними и структуру программы. Модель реагирует на команды из контроллера и выдает информацию и/или изменяет свое состояние. Она передает данные в представление. Представление (View) Задача компонента — визуализация информации, которую он получает от модели. View отображает данные на уровне пользовательского интерфейса. Например, в виде таблицы или списка. Представление определяет внешний вид приложения и способы взаимодействия с ним. Контроллер (Controller) Он обеспечивает взаимодействие с системой: обрабатывает действия пользователя, проверяет полученную информацию и передает ее модели. Контроллер определяет, как приложение будет реагировать на действия пользователя. Также контроллер может отвечать за фильтрацию данных и авторизацию.

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

Профессия / 8 месяцев
IT-специалист с нуля

Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

vsrat_7 1 (1)

Компоненты модели различаются степенью зависимости друг от друга и ограничениями:

  • модель не зависит от представления и контроллера, но и не может использовать классы из их разделов;
  • представление может обращаться к модели за данными и событиями, но не может ее менять;
  • контроллер не может отображать данные, но способен менять модель в зависимости от действий пользователя.

Концепцию MVC предложил в конце 1970-х годов сотрудник Xerox Трюгве Реекскауг. Она была реализована в языке программирования Smalltalk-80. Окончательную версию шаблона опубликовали только 10 лет спустя в журнале Technology Object. Концепция стала популярна с появлением быстро развертываемых фреймворков и интерактивных веб-приложений.

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить

Как работает MVC

Разберем на реальном примере. Условная физическая модель MVC-архитектуры — персональный компьютер, в котором:

  • контроллер — клавиатура или мышь. С их помощью пользователь вводит команды;
  • модель — системный блок, в котором происходит обработка команд и хранятся системные и пользовательские файлы;
  • представление — монитор, на котором визуализируется работа системного блока.

На этом примере легче понять зависимость компонентов друг от друга:

  • если заменить системный блок (без переноса старых данных), но оставить старый монитор и клавиатуру, пользователь получит другой компьютер с новой ОС, файлами, системными характеристиками, драйверами и т.д.;
  • если поменять монитор и клавиатуру, но оставить старый системный блок, человек будет использовать прежнюю ОС, файлы, системные характеристики. Изменения коснутся только некоторых драйверов.

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

Читайте также Как сделать свой веб-сайт?

Назначение модели MVC

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

Модель MVC решает следующие задачи:

  • изменение только пользовательского интерфейса, а не бизнес-логики приложения;
  • использование в одном приложении разных интерфейсов с возможностью выбора;
  • замена реакции приложения на действия пользователя за счет использования другого контроллера.

В более широком плане внедрение модели помогает:

  • упростить код большого приложения, сделать его понятным и структурированным, облегчить поддержку, тестирование, повторное использование элементов;
  • организовать независимую работу различных отделов, которые занимаются разработкой своей части программного продукта;
  • упростить программную поддержку MVC-приложения за счет модификации отдельных компонентов, а не всей архитектуры.

Примеры MVC в веб-разработке

Разберем использование MVC в веб-фреймворках на примере социальной сети.

Контроллер

Пользователь заходит на сайт социальной сети и кликает на ссылку «Друзья», отправляя запрос на сервер.

website.com/profile/ —> возвращает ваш профиль

website.com/friends/ —> возвращает список друзей

website.com/friend=/ —> возвращает конкретного друга

Модель

На сервере приложение обрабатывает запрос, извлекает из базы данных список друзей пользователя.

< "userName": < "firstName": "Имя", "lastName": "Фамилия" >, "friends": [] >

Представление

Информация о друзьях пользователя выводится на экран в виде списка с юзернеймами.

Концепция MVC с успехом используется в веб-разработке благодаря универсальности, гибкости и простоте применения. В то же время она имеет ограничения. Это привело к появлению более специализированных вариантов реализации MVC, таких как Model-View-Presenter (WMVP) и Model-View-ViewModel (MVVM).

IT-специалист с нуля

Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *