À mon avis, il existe deux types de MVC - pur et impur (faute d'un meilleur mot :)
Pure MVC est ce qui a été introduit dans les petites discussions:
Ceci était destiné aux applications informatiques personnelles / de bureau. Comme vous pouvez le constater, le modèle informe les vues de toutes les mises à jour / modifications apportées. Pas si avec MVC (impur).
L'autre MVC (impur) vanté pour les applications Web est davantage un motif PAC ( Presentation-abstraction-control ) plutôt que le MVC classique ci-dessus. C'est plus de l'organisation du code et de la séparation des préoccupations:
- Modèle : Abstraction pour les données stockées
- Contrôle : généralement appelé couche de logique métier et partie de l'application chargée de router les demandes HTTP vers la logique métier correspondante (contrôleur).
- Vue : affiche principalement les modèles qui formatent les données du modèle et les renvoient au client. Le modèle n'envoie JAMAIS de mises à jour à la vue, pas plus que la vue ne s'abonne aux mises à jour d'un modèle. Ce serait un cauchemar couplé. Par conséquent, cela ressemble plus à du PAC qu'au vrai MVC.
Maintenant, voici comment une application Web est généralement structurée:
- Interface frontale : MVC sur un client utilisant des frameworks tels que Backbone.js, etc., Il s'agit essentiellement du "vrai" formulaire MVC.
- Back-end : Encore une fois, vous avez (impur) MVC / PAC pour l'organisation du code et la séparation des problèmes
- Application Web globale (pour l'application Web dans son ensemble): Si le backend RESTful renvoie uniquement des données JSON, l'intégralité de celui-ci peut être perçu comme un modèle pour l'application client frontale où résident essentiellement View et Controller.
Alors, quels sont les inconvénients de MVC ? Eh bien, le modèle a résisté à l'épreuve du temps, donc il n'y en a pas beaucoup qui importent moins que cela soit un peu "compliqué". Vous voyez, le MVC est un modèle composé - implémente un modèle stratégie / observateur et tous sont bien agencés pour former un modèle de haut niveau.
Devez-vous l'utiliser partout? Peut être pas. Des applications Web extrêmement complexes peuvent être divisées en plusieurs couches! Vous ne pourrez peut-être pas vous contenter des couches View / Business Logic / Data. Le cadre / l’organisation globale peut encore être MVC-ish, mais seulement à un niveau macroscopique.
Voici un exemple où MVC en lui-même est peut-être un mauvais choix : essayez de concevoir un système de contrôle du trafic aérien ou une application de traitement des emprunts / des prêts hypothécaires pour une grande banque; juste en fait, MVC serait un mauvais choix. Vous aurez inévitablement des bus d'événements / des files de messages avec une architecture multicouche avec MVC au sein de couches individuelles et éventuellement une conception globale MVC / PAC pour mieux organiser la base de code.