Model-View-Controller
Model-View-Controller | |
---|---|
англ. Model-View-Controller | |
![]() | |
Структура |
|
Описан в Design Patterns | Нет |
История
Коные позиции по отношению к остальным фреймворкам без этого шаблона[1].
Различия описания концепции шаблона
С развитием объектно-ориентированного программирования и понятия о шаблонах проектирования — был создан ряд модификаций концепции MVC, которые при реализации у разных авторов могут отличаться от оригинальной. Так, например, Эриан Верми в 2004 году описал пример обобщённого MVC[2].
В предисловии к дисзователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:
![]() | В разделе не хватает ссылок на источники (см. рекомендации по поиску). |
Концеп
Контроллер обеспечивает «связь» между пользователем и системой. Контролирует и направляет данные от пользователя к системе и наоборот. Использует модель и представление для реализации необходимого действия.
Функциональные возможности и расхождения
Поскольку MVC не имеет строгой реализации, то реализован он может быть по-разному. Нет общепринятого определения, где должна располагаться бизнес-логика. Она может находиться как в контроллере, так и в модели. В последнем случае, модель будет содержать все бизнес-объекты со всеми данными и функциями.
Некоторые фреймворки жёстко задают, где должна располагаться бизнес-логика, другие не имеют таких правил.
Такжого иерархического вида — может использоваться шаблон «компоновщик». Кроме того, могут использоваться и другие шаблоны проектирования — например, «фабричный метод», который позволит задать по умолчанию тип контроллера для соответствующего вида.
Наиболее частые ошибки
Начинающие программисты очень часто трактуют архитектурную модель MVC как пассивную модель MVC: модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате — код моделей по факту является средством получения данных из СУБД, а контроллер — типичным модулем, наполненным бизнес-логикой. В результате такого понимания — MVC-разработчики стали писать код, который Падриг Брэди (известный в кругах сообщества «Zend Framework») охарактеризовал как «ТТУК» («Толстые, тупые, уродливые контроллеры»; Fat Stupid Ugly Controllers):
Среднестатистический ТТУК получал данные из БД (используя уровень абстракции базы данных, делая вид, что это модель) или манипулировал, проверял, записывал, а также передавал данные в Представление. Такой подход стал очень популярен потому, что использование таких контроллеров похоже на классическую практику использования отдельного php-файла для каждой страницы приложения.
— [http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/ The M in MVC: Why Models are Misunderstood and Unappreciated
Но в объектно-ориентированном программировании используется активная модель[3] MVC, где модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика; также модели могут инкапсулировать в себе другие модели. Контроллеры же, — как элементы информационной системы, — ответственны лишь за:
- приём запроса от пользователя;
- анализ запроса;
- выбор следующего действия системы, соответственно результатам анализа (например, передача запроса другим элементам системы).
Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами информационной системы.
См. также
Примечания
- ↑ hotframeworks . Дата обращения: 10 января 2017. Архивировано 10 февраля 2017 года.
- ↑ Vermeij. Arjan A Generic MVC Model in Java Архивная копия от 1 октября 2011 на Wayback Machine 2004
- ↑ Обобщенный Model-View-Controller . Дата обращения: 17 июня 2020. Архивировано 17 февраля 2020 года.
Литература
- Адам Фримен. ASP.NET MVC 4 с примерами на C# 5.0 для профессионалов, 4-е издание = Pro ASP.NET MVC 4, 4th edition. — М.: «Вильямс», 2013. — 688 с. — ISBN 978-5-8459-1867-3.
- Джесс Чедвик и др. ASP.NET MVC 4: разработка реальных веб-приложений с помощью ASP.NET MVC = Programming ASP.NET MVC 4: Developing Real-World Web Applications with ASP.NET MVC. — М.: «Вильямс», 2013. — 432 с. — ISBN 978-5-8459-1841-3.
- Сергей Рогачев. Обобщённый Model-View-Controller // rsdn.org. — 2007.
Ссылки
- MVC простым языком — на примере автомобиля Архивная копия от 4 июля 2015 на Wayback Machine
- Сергей Бердачук. Eclipse RCP. Файловый менеджер
- Model-View-Controller в .Net
- Разработка встроенных приложений с использованием eSWT