Какое лучшее определение MVC?

Я использую Zend Framework с конфигурацией MVC, читал о Ruby on Rails и планирую изучить другие фреймворки MVC на Python (Django?). Мне очень нравится, как он изолирует некоторые части логики, безопасности и проверки. Но всего через год использования я прочитал ответ здесь говоря, что почти у всех есть неправильное определение MVC, и это заставило меня задуматься: какое определение MVC является правильным и где я могу прочитать о шаблоне и стандартных реализациях?

Обновление: я понимаю, что мы все знаем определение BASIC (есть модель, контроллер и представление, действия на контроллере переходят к представлению с некоторой информацией после того, как что-то сделано с моделью), но мне бы очень хотелось знать, какое определение ВЫ ДУМАЕТЕ, что все ЗНАЮТ, и почему оно неверно (и, может быть, это объяснит всем, где могут быть ошибки, мнения и, конечно, какова ваша реальная точка зрения на это)


person DFectuoso    schedule 08.01.2009    source источник


Ответы (7)


См. главу 14 книги «Шаблоны архитектуры корпоративных приложений» Мартина Фаулера.

Раздел, посвященный MVC, начинается словами:

«Model View Controller (MVC) — один из наиболее часто цитируемых (и чаще всего неправильно цитируемых) паттернов. Он начинался как фреймворк, разработанный Трюгве Реенскаугом для платформы Smalltalk в конце 1970-х. С тех пор он играет важную роль в большинстве UI. фреймворков и в размышлениях о дизайне пользовательского интерфейса».

Там также говорится:

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

...

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

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

person Ash    schedule 08.01.2009

Самая большая ошибка, которую я обнаруживаю в понимании людьми MVC, заключается в том, что они думают, что шаблон включает в себя больше, чем на самом деле. В частности, люди часто думают:

  • Модель = База данных
  • Вид = HTML
  • Контроллер = бизнес-логика и все остальное.

Часто так все работает в небольшом приложении, но на самом деле MVC — это способ отделить бизнес-код от кода представления. Модель делает всю реальную деловую работу. Представления обеспечивают внешний вид, а контроллер сопоставляет одно с другим.

person Jack Ryan    schedule 08.01.2009
comment
Я не голосовал, потому что я не уверен, что модель должна выполнять настоящую бизнес-работу, я думаю, что контроллер может делать больше, чем отображение (это работа маршрутизатора). - person DFectuoso; 08.01.2009

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

person Perpetualcoder    schedule 08.01.2009

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

Цель состоит в том, чтобы переместить эти элементы в повторно используемые компоненты и иметь возможность менять местами различные реализации, а также иметь возможность тестировать отдельные части изолированно. ИМО, вот что такое MVC.

Это довольно хорошее описание некоторые из истории и популярных реализаций парадигмы MVC. Мы должны добавить шаблон Model — View — ViewModel. это также рекомендуется для WPF.

person Quibblesome    schedule 08.01.2009

Шаблон модель-представление-контроллер предлагает три основных компонента или объекта для использования в разработке программного обеспечения:

  • Модель, представляющая базовую логическую структуру данных в программном приложении и связанный с ней высокоуровневый класс. Эта объектная модель не содержит никакой информации о пользовательском интерфейсе.
  • View , представляющий собой набор классов, представляющих элементы пользовательского интерфейса (все, что пользователь может видеть и на что может реагировать на экране, например кнопки, поля отображения и т. д.).
  • Controller , который представляет классы, соединяющие модель и представление, и используется для связи между классами в модели и представлении.
person user7109078    schedule 03.11.2016

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

person Muhammad Mohsin Muneer    schedule 11.08.2015

Проект разделен на три части:

  1. модель: представлена ​​в базе данных.
  2. представление: представлено в интерфейсе вашего проекта, что вы можете сделать это с помощью html, javaScript и css.
  3. контроллер: это ваша бизнес-логика, представленная в ваших функциях, и это связь между моделью и представлением, которая также представляет уровень безопасности.
person ledia    schedule 13.04.2018