Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 20:22:30
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

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


mvc

С этой статьи я начинаю новый цикл публикаций на сайте codingcraft.ru. За последние годы в сети появились замечательные ресурсы о программировании, с которыми моему сайту сложно конкурировать по посещаемости, объемам материалов, их разнообразию, многообразию примеров и т.д. и т.п. В этой связи я возвращаюсь к идее создавать своего рода навигационную карту по открытым источникам знаний о разработке программных продуктов – карту, составленную на основе собственного опыта, на которой буду отмечать наиболее значимые пункты с их кратким описанием...

Model-View-Controller (Модель-Представление-Контроллер) – это шаблон (паттерн) проектирования, который, как и все прочие шаблоны проектирования, появился не “из неоткуда”, а в результате анализа поведения объектов реального мира. В контексте данного шаблона модель (Model) - это не что иное, как модель некой предметной области или отдельного ее фрагмента. Контроллер (Controller) – абстракция, воздействующая на модель и представляющая результат своего воздействия в виде представления (View). К примеру, когда вы являетесь в какой-нибудь государственный орган за какой-нибудь важной справкой, то вы взаимодействуете с некой базой знаний (модель) через сотрудника - оператора (а иногда эта должность так и называется - контролёр), и результатом этого взаимодействия является справка – то самое представление, отражающее нужную вам часть знаний из общей базы знаний. То же самое происходит и в магазине, где контроллер – это продавец, модель – магазин, представление – товар. Таким образом, не стоит зацикливаться на том, что представление – это аналог отчета. Представление – это любой результат воздействия контроллера на модель. Контроллер – это посредник, который знает, чего хочет пользователь, и как это запросить у модели. Именно этого принципа и нужно придерживаться, когда вы проектируете свои предложения.

На первый взгляд вроде бы все просто, но это лишь на первый взгляд. Причины неэффективного использования паттерна MVC - это некорректное, с точки зрения его концепции, распределение функциональности между тремя компонентами этого паттерна. Точнее будет сказать так: эффективность применения шаблона проектирования Model-View-Controller напрямую зависит от правильного разделения (баланса) ответственности между всеми участниками взаимодействия: между пользователем, контроллером, моделью и представлением. Приведу еще один пример из жизни, который должен помочь “визуализировать” правильное разделение ответственности между моделью, контроллером и представлением. Итак, модель – это правила дорожного движения (ПДД), пользователь – водитель, контроллер – сотрудник ГИБДД, представление – штраф, как мера наказания за нарушение ПДД. Как только в ПДД попадают нормы и положения, которые могут применяться выборочно на усмотрение сотрудника ГИБДД в одной и той же сложившейся ситуации (применить либо выговор, либо штраф, либо лишение прав), так сразу функции модели частично переходят к контроллеру, что является грубым нарушением концепции. Контроллер не должен ничего “решать сам” – он должен быть посредником между пользователем и моделью! В нашем примере, в случае, если возникла неопределенность, эту неопределенность должен разрешить суд – отдельный и независимый компонент модели!

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

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

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

Итого:

Модель – это абстракция, которая моделирует объекты предметной области, связи между объектами, логику (если угодно, законы) взаимодействия объектов между собой и т.п. сущности, отвечающие за качество и полноту информационного моделирования.

Контроллер – посредник, между запросом пользователя и моделью. Контроллер отвечает за интерпретацию запроса пользователя, его корректный перевод на язык модели, формирование запроса к модели и передачи результата запроса на уровень представления!

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

Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.