На мою думку, є два типи MVC - чистий і нечистий (за відсутністю кращого слова :)
Чистий MVC - це те, що було введено в невеликі розмови:
Це було призначено для персональних комп'ютерних / настільних програм. Як бачите, модель інформує погляди про будь-які оновлення / зміни, внесені до неї. Не так із (нечистим) MVC.
Інший (нечистий) MVC, який рекламується для веб-додатків, - це більше модель PAC ( Presentation-abstraction-control ) замість класичного MVC, наведеного вище. Більше про організацію коду та розділення проблем:
- Модель : Абстракція збережених даних
- Контроль : зазвичай відомий як рівень бізнес-логіки, а також частина програми, відповідальна за маршрутизацію HTTP-запитів до відповідної бізнес-логіки (ака-контролер)
- Перегляд : Переважно переглядайте шаблони, які форматують дані з моделі та повертають їх клієнту. Модель НІКОЛИ не надсилає оновлення для перегляду, а також подання не підписується на оновлення з моделі. Це був би кошмар. Отже, це більше схоже на PAC, ніж на справжній MVC.
Тепер ось як структурується веб-додаток:
- Фронтальний : MVC для клієнта, що використовує фреймворки як Backbone.js тощо. Це, по суті, справжня форма MVC.
- Бек-енд : знову ж таки, у вас є (нечистий) MVC / PAC для організації коду та розділення проблем
- Глобальний веб-додаток (для веб-програми в цілому): Якщо у вас є RESTful сервер, який повертає лише дані JSON, то весь ваш сервер може сприйматися як модель для клієнтського додатка, де перегляд і контролер по суті знаходяться.
Отже, які є недоліки MVC ? Ну, модель витримала випробування часом, тому не так багато, що має значення, окрім того, що це трохи «складно». Розумієте, MVC - це складна модель - реалізує стратегію / зразок спостерігачів, і всі вони добре організовані для формування високоякісного шаблону.
Чи варто використовувати його скрізь? Можливо, не. Надзвичайно складні веб-програми, можливо, розбиті на кілька шарів! Можливо, ви не зможете піти лише з просторів перегляду / бізнес-логіки / даних. Загальна структура / організація все ще може бути MVC-ish, але лише на макроскопічному рівні.
Ось приклад, коли просто MVC сам по собі може бути поганим вибором : Спробуйте створити систему контролю повітряного руху або заявку на обробку позики / іпотеки для великого банку - просто MVC сам по собі був би поганим вибором. У вас неминуче з'являться шини подій / черги повідомлень, а також багатошарова архітектура з MVC в межах окремих шарів і, можливо, всебічний дизайн MVC / PAC, щоб зберегти базу коду краще організованою.