Meiner Meinung nach gibt es zwei Arten von MVC - reine und unreine (für das Fehlen eines besseren Wortes :)
Pure MVC ist das, was in Small Talk eingeführt wurde:
Dies war für Personal Computing / Desktop-Anwendungen gedacht. Wie Sie sehen, informiert das Modell die Ansichten über etwaige Aktualisierungen / Änderungen. Nicht so bei (unreinen) MVC.
Die andere (unreine) MVC, die für Webanwendungen angepriesen wird, ist eher ein PAC - Muster ( Presentation-Abstraction-Control ) als die oben beschriebene klassische MVC. Das ist mehr Code-Organisation und Trennung von Bedenken:
- Modell : Abstraktion für gespeicherte Daten
- Steuerung : In der Regel die sogenannte Business-Logik-Schicht sowie ein Teil der Anwendung, die für das Weiterleiten der HTTP-Anforderungen an die entsprechende Business-Logik (auch als Controller bezeichnet) verantwortlich ist.
- Ansicht : Meistens werden Vorlagen angezeigt, mit denen die Daten aus dem Modell formatiert und an den Client zurückgegeben werden. Das Modell sendet NIEMALS Aktualisierungen an die Ansicht und die Ansicht 'abonniert' auch keine Aktualisierungen von einem Modell. Es wäre ein Albtraum. Daher ist es eher PAC als echte MVC.
So ist eine Webanwendung normalerweise aufgebaut:
- Front-End : MVC auf dem Client, der Frameworks wie Backbone.js usw. verwendet. Dies ist im Wesentlichen die "wahre" MVC-Form.
- Back-End : Auch hier haben Sie (unreine) MVC / PAC für die Code-Organisation und die Trennung von Bedenken
- Globale Webanwendung (für die gesamte Webanwendung): Wenn Sie über ein RESTful-Backend verfügen, das nur JSON-Daten zurückgibt, kann Ihr gesamtes Backend als Modell für die Front-End-Client-Anwendung angesehen werden, in der sich View und Controller im Wesentlichen befinden.
Was sind nun einige Nachteile von MVC ? Nun, das Muster hat den Test der Zeit bestanden, so dass es nicht viele gibt, die eine Rolle spielen, außer dass es ein bisschen "kompliziert" ist. Sie sehen, die MVC ist ein zusammengesetztes Muster - implementiert Strategie / Beobachter-Muster und alle sind gut angeordnet, um ein Muster auf hoher Ebene zu bilden.
Solltest du es überall benutzen? Vielleicht nicht. Extrem komplexe Webanwendungen können in mehrere Ebenen aufgeteilt werden! Es kann sein, dass Sie nicht nur mit View / Business Logic / Data-Layern durchkommen. Das übergeordnete Framework / die übergeordnete Organisation kann immer noch MVC-artig sein, jedoch nur auf makroskopischer Ebene.
Hier ist ein Beispiel, in dem MVC für sich allein möglicherweise eine schlechte Wahl ist : Versuchen Sie, ein Flugsicherungssystem oder eine Kredit- / Hypothekenbearbeitungsanwendung für eine große Bank zu entwerfen - MVC für sich allein wäre eine schlechte Wahl. Sie werden zwangsläufig Ereignisbusse / Nachrichtenwarteschlangen sowie eine mehrschichtige Architektur mit MVC innerhalb einzelner Schichten und möglicherweise ein übergreifendes MVC / PAC-Design haben, um die Codebasis besser zu organisieren.