На мой взгляд, существует два типа MVC - чистый и нечистый (из-за отсутствия лучшего слова :)
Чистый MVC - это то, что было введено в светскую беседу:
Это было предназначено для персональных компьютеров / настольных приложений. Как видите, модель информирует мнения о любых обновлениях / изменениях, внесенных в нее. Не так с (нечистым) MVC.
Другой (нечистый) MVC, рекламируемый для веб-приложений, - это скорее шаблон PAC ( Presentation-abstraction-control ) вместо классического MVC, описанного выше. Это больше касается организации кода и разделения интересов:
- Модель : абстракция для хранимых данных
- Управление : обычно то, что известно как уровень бизнес-логики, а также часть приложения, отвечающая за маршрутизацию HTTP-запросов к соответствующей бизнес-логике (он же контроллер)
- Просмотр : в основном просмотр шаблонов, которые форматируют данные из модели и возвращают их клиенту. Модель НИКОГДА не отправляет обновления представлению, а также представление не подписывается на обновления от модели. Это был бы кошмар. Следовательно, это больше похоже на PAC, чем на настоящий MVC.
Теперь, как обычно структурируется веб-приложение:
- Front-end : MVC на клиенте, использующем фреймворки как Backbone.js и т. Д., По сути, это «истинная» форма MVC.
- Back-end : Опять же, у вас есть (нечистый) MVC / PAC для организации кода и разделения проблем
- Глобальное веб-приложение (для веб-приложения в целом): если у вас есть бэкэнд RESTful, который возвращает только данные JSON, тогда весь ваш бэкэнд может восприниматься как модель для клиентского приложения внешнего интерфейса, где по сути находятся View и Controller.
Итак, каковы некоторые недостатки MVC ? Что ж, паттерн выдержал испытание временем, поэтому не так уж много значимых, кроме того, что он немного «сложный». Видите ли, MVC является составным шаблоном - реализует шаблон стратегии / наблюдателя, и все они хорошо организованы для формирования шаблона высокого уровня.
Вы должны использовать это везде? Возможно, нет. Чрезвычайно сложные веб-приложения могут быть разбиты на несколько слоев! Возможно, вам не удастся уйти с помощью только слоев View / Business Logic / Data. Всеобъемлющей структурой / организацией все еще может быть MVC, но только на макроскопическом уровне.
Вот пример, где просто MVC сам по себе может быть плохим выбором : попробуйте разработать систему управления воздушным движением или приложение для обработки кредита / ипотеки для крупного банка - просто MVC сам по себе был бы плохим выбором. У вас неизбежно появятся шины событий / очереди сообщений, а также многоуровневая архитектура с MVC на отдельных уровнях и, возможно, всеобъемлющий дизайн MVC / PAC для лучшей организации кодовой базы.