Beim Lesen der Dokumentation von Kohana stellte ich fest, dass der Hauptunterschied in der Version 3.0 darin besteht, dass sie dem HMVC-Muster anstelle von MVC folgt, wie dies in Version 2.x der Fall ist. Die Seite darüber in Kohanas Dokumenten und die auf Wikipedia gab mir keine klare Vorstellung.
Frage: Was ist das HMVC-Muster und wie unterscheidet es sich von MVC?
Antworten:
Sam de Freyssinet (einer der Kohana-Entwickler) schrieb einen ziemlich ausführlichen Artikel über HMVC , was es ist und wie es verwendet werden kann.
Link ist tot: Neuer Link - https://web.archive.org/web/20160214073806/http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/
quelle
Ich bin gerade dabei, mein eigenes PHP 5.3 HMVC-Framework namens Alloy zu entwickeln . Da ich stark in HMVC investiert und dort verkauft bin, dachte ich, ich könnte einen anderen Standpunkt vertreten und vielleicht eine bessere Erklärung dafür, warum HMVC verwendet werden sollte und welche Vorteile es bringt.
Der größte praktische Vorteil der Verwendung einer HMVC-Architektur ist die "Widgetisierung" von Inhaltsstrukturen. Ein Beispiel können Kommentare, Bewertungen, RSS-Feed-Anzeigen von Twitter oder Blogs oder die Anzeige von Warenkorbinhalten für eine E-Commerce-Website sein. Es handelt sich im Wesentlichen um einen Inhalt, der auf mehreren Seiten und möglicherweise sogar an verschiedenen Stellen angezeigt werden muss, abhängig vom Kontext der Haupt-HTTP-Anforderung.
Herkömmliche MVC-Frameworks bieten im Allgemeinen keine direkte Antwort auf diese Art von Inhaltsstrukturen. Daher duplizieren und wechseln Benutzer im Allgemeinen Layouts, verwenden benutzerdefinierte Helfer, erstellen ihre eigenen Widget-Strukturen oder Bibliotheksdateien oder ziehen nicht verwandte Daten aus den angeforderten Hauptdaten Controller zum Durchschieben in die Ansicht und zum teilweisen Rendern. Keine dieser Optionen ist besonders gut geeignet, da die Verantwortung für das Rendern eines bestimmten Inhalts oder das Laden der erforderlichen Daten in mehrere Bereiche gelangt und an den verwendeten Stellen dupliziert wird.
HMVC oder insbesondere die Möglichkeit, Unteranforderungen an einen Controller zu senden, um diese Verantwortlichkeiten zu erfüllen, ist die offensichtliche Lösung. Wenn Sie darüber nachdenken, was Sie tun, passt es genau zur Controller-Struktur. Sie müssen einige Daten zu Kommentaren laden und im HTML-Format anzeigen. Sie senden also eine Anfrage mit einigen Parametern an den Kommentar-Controller, dieser interagiert mit dem Modell, wählt eine Ansicht aus und die Ansicht zeigt den Inhalt an. Der einzige Unterschied besteht darin, dass die Kommentare inline angezeigt werden sollen, und zwar unterhalb des Blog-Artikels, den der Benutzer anstelle einer vollständig separaten vollständigen Kommentarseite anzeigt (obwohl Sie mit einem HMVC-Ansatz sowohl interne als auch externe Anforderungen mit demselben Controller und "kill" bearbeiten können zwei Fliegen mit einer Klappe ", wie das Sprichwort sagt). In dieser Hinsicht HMVC ist eigentlich nur ein natürliches Nebenprodukt des Strebens nach mehr Codemodularität, Wiederverwendbarkeit und einer besseren Trennung von Bedenken. Dies ist das Verkaufsargument von HMVC.
Während der TechPortal-Artikel von Sam de Freyssinet über die Skalierung mit HMVC interessant ist, werden nicht 90% der Menschen, die HMVC-Frameworks verwenden, echte, praktische und alltägliche Vorteile daraus ziehen.
quelle
HMVC ist eng mit dem "komponentenbasierten" Versandansatz verbunden. Grundsätzlich kann jeder Controller anstelle eines einzelnen Dispatchers, der an einen Controller delegiert, selbst als Dispatcher fungieren. Dies gibt Ihnen eine Hierarchie von Controllern. Das Design ist flexibler und bewirkt eine bessere Kapselung von Code, jedoch zu einem Preis höherer Abstraktion. Konstrukt ist nach diesem Muster gestaltet.
Siehe auch diese Antwort: /programming/115629/simplest-php-routing-framework/120411#120411
quelle
Zumindest in Kohana ist eine HMVC-Anforderung eine HTTP-Anforderung, die "intern" bearbeitet wird: Anstatt über das Netzwerk ausgegeben zu werden, wird sie vom Framework selbst weitergeleitet, versendet und verarbeitet. Die Ähnlichkeit der Namen "HMVC" und "MVC" ist insofern verwirrend, als sie einen zugrunde liegenden Zusammenhang zwischen den Begriffen nahe legt, der tatsächlich nicht existiert: einer ist keine geringfügige Variante oder Modifikation des anderen, es handelt sich um völlig andere Dinge. (HMVC wird auch als Ajax ohne clientseitige HTTP-Anforderung bezeichnet.) Kohanas Betonung auf und Unterstützung für "HMVC" bedeutet, dass das Framework eine HTTP-basierte serviceorientierte Architektur stark unterstützt.
Der Vorteil dieses Architekturmusters besteht darin, dass es für interne und externe Anforderungen trivial ist, "interne" Dienstanforderungen in "externe" Anforderungen umzuwandeln oder umgekehrt, da die gleiche "Aufrufkonvention" für interne und externe Anforderungen verwendet wird.
Obwohl dies ein vernünftiges Architekturmuster ist, erscheint es unnötig, ihm einen eigenen Namen zu geben (Symfony2 beschreibt dasselbe Konzept " Unteranforderungen "), und tatsächlich scheint der Name eine falsche Bezeichnung zu sein: Es gibt keine besondere Anforderung oder Notwendigkeit, dass die Anforderungen eine bilden Hierarchie (außer dem Standardaufrufdiagramm jedes imperativen Programms); Die Anforderungen können beispielsweise leicht rekursiv sein.
[ Update April 2011, März 2012: Erweitert auf Antwort als Antwort auf Kommentare.]
quelle
HMVC ist Hierarchical Model View Controller. In normaler MVC hat jedes GUI-Objekt seine MVC. Im Gegensatz zu HMVC besteht jedoch keine Beziehung zwischen dem übergeordneten GUI-Objekt und dem untergeordneten GUI-Objekt. In HMVC hat jedes GUI-Objekt Zugriff auf seine untergeordneten Objekte und jedes untergeordnete Objekt kann auf sein übergeordnetes Objekt zugreifen.
In jeder Ansicht gibt es also eine übergeordnete Ansicht. Über diese kann auf die übergeordnete Ansicht zugegriffen werden. Denn in jedem Controller gibt es einen übergeordneten Controller, über den das Ereignis an den übergeordneten Controller übergeben werden kann (wenn das Ereignis nicht in seinem Gültigkeitsbereich liegt).
Für eine detaillierte Beschreibung klicken Sie bitte hierNeuer Link ist diese Adresse
quelle