Что такое контроллер в программировании
Перейти к содержимому

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

  • автор:

Модель-Представление-Контроллер (MVC)

Yii использует шаблон проектирования Модель-Представление-Контроллер (MVC, Model-View-Controller), который широко применяется в веб-программировании.

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

Помимо этого, Yii использует фронт-контроллер, называемый приложением (application), который инкапсулирует контекст обработки запроса. Приложение собирает информацию о запросе и передает её для дальнейшей обработки соответствующему контроллеру.

Следующая диаграмма отображает структуру приложения Yii:

Статическая структура приложения Yii

Статическая структура приложения Yii

1. Типичная последовательность работы приложения Yii ¶

Следующая диаграмма описывает типичную последовательность процесса обработки пользовательского запроса приложением:

Типичная последовательность работы приложения Yii

Типичная последовательность работы приложения Yii

  1. Пользователь осуществляет запрос посредством URL http://www.example.com/index.php?r=post/show&id=1 , и веб-сервер обрабатывает его, запуская скрипт инициализации index.php .
  2. Скрипт инициализации создает экземпляр приложения и запускает его на выполнение.
  3. Приложение получает подробную информацию о запросе пользователя от компонента приложения request .
  4. Приложение определяет запрошенные контроллер и действие при помощи компонента urlManager . В данном примере контроллером будет post , относящийся к классу PostController , а действием — show , суть которого определяется контроллером.
  5. Приложение создаёт экземпляр запрашиваемого контроллера для дальнейшей обработки запроса пользователя. Контроллер определяет соответствие действия show методу actionShow в классе контроллера. Далее создаются и применяются фильтры (например, access control, benchmarking), связанные с данным действием, и, если фильтры позволяют, действие выполняется.
  6. Действие считывает из базы данных модель Post с ID равным 1 .
  7. Действие подключает представление show , передавая в него модель Post .
  8. Представление получает и отображает атрибуты модели Post .
  9. Представление подключает некоторые виджеты.
  10. Сформированное представление вставляется в макет страницы.
  11. Действие завершает формирование представления и выводит результат пользователю.

Found a typo or you think this page needs improvement?
Edit it on github !

Что такое модель 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. Контроллер получает ввод пользователя, обрабатывает его и посылает обратно результат обработки, например, в виде представления.

При использовании контроллеров существуют некоторые условности. Так, по соглашениям об именовании названия контроллеров должны оканчиваться на суффикс «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 не будет опубликован. Обязательные поля помечены *