Разделение интересов, которое считается преимуществом MVC, на самом деле является также продвижением 3-уровневой / 3-уровневой системы. Там также бизнес-логика независима и может использоваться на разных уровнях представления.
Основным отличием является то, что в классическом MVC модель может иметь ссылку на вид. Это означает, что при обновлении данных модель может отправить эти данные обратно, возможно, к нескольким представлениям. Ярким примером является настольное приложение, в котором данные визуализируются несколькими способами. Это может быть так же просто, как таблица и график. Изменение в таблице (которое является изменением в одном представлении) сначала проталкивается через контроллер в модель, которая затем выталкивает его обратно в график (другое представление). Затем график обновляется.
Поскольку разработка настольных систем находится в состоянии упадка, многие программисты связываются с MVC только в некоторых веб-вариантах, например через JSF в Java EE.
В этих случаях модель почти никогда не имеет ссылки на вид. Это связано с тем, что сеть в основном основана на запросах и ответах, и после того, как запрос был обработан, сервер не может отправлять дополнительную информацию. То есть обновление, передаваемое от модели к клиенту, будет бессмысленным. С обратным ajax / comet это меняется, но многие сетевые MVC-фреймворки все еще не используют это в полной мере.
Таким образом, в случае веб-ориентированного MVC типичный «треугольник» между M, V и C меньше, и этот вариант MVC фактически ближе к n-уровневой модели, чем «истинный» MVC.
Также обратите внимание, что некоторые веб-фреймворки MVC имеют промежуточную соединительную часть между M, V и C, называемую компонентом поддержки (Java / JSF) или кодом позади (ASP.NET). В JSF контроллер предоставляется платформой, и представление часто не привязывается напрямую к модели, а использует этот компонент поддержки в качестве посредника. Базовый компонент очень тонкий и в основном просто предварительно извлекает данные из модели одним способом и преобразует конкретные сообщения модели (например, исключения) в конкретные сообщения просмотра (например, некоторый читаемый человеком текст).