Model-view-controller (MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные.
Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента
- Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя своё состояние.
- Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
- Поведение (Controller). Интерпретирует данные, введённые пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Важно отметить, что как представление, так и поведение зависят от модели. Однако модель не зависит ни от представления, ни от поведения. Это одно из ключевых достоинств подобного разделения. Оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели.
Впервые данный шаблон проектирования был предложен для языка Smalltalk.
Наиболее частые ошибки
Начинающие программисты (особенно в веб-программировании) очень часто трактуют архитектурную модель MVC совершенно неправильно. Они рассматривают Модель (Model) исключительно как совокупность функций и/или методов для доступа к данным, а Контроллер (Controller) — как элемент системы, содержащий бизнес-логику. В результате код Моделей по факту является средством получения данных из СУБД, а Контроллер представляет собой типичный модуль, наполненный бизнес-логикой или скрипт в терминологии веб-программирования. В результате такого понимания MVC разработчики стали писать код, который, известный в кругах Zend Framework сообщества разработчик Pádraic Brady, охарактеризовал как ТТУК — «Толстые тупые уродливые контроллеры» (Fat Stupid Ugly Controllers) перевод:
Среднестатистический ТТУК получал данные из БД (используя уровень абстракции базы данных, делая вид, что это модель) или манипулировал, валидировал, записывал, а также передавал данные в Вид. Такой подход стал очень популярен, потому что использование таких контроллеров похоже на классическую практику использования отдельного php файла для каждой страницы приложения.
Становится очевидным, что Модель в терминах MVC — это не только совокупность кода доступа к данным и СУБД, но и, как минимум, логика домена и, возможно, некоторые другие части системы. В свою очередь контроллеры должны избавляться от логики приложения (Бизнес-логики), которую необходимо перенести в отдельный слой, например в слой служб (Service Layer). Таким образом Контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами системы.

Комментариев нет:
Отправить комментарий