Guten Abend!
Ich hätte da eine Idee, wie man HMVC umsetzen könnte und würde gerne mal eure Meinung dazu hören.
Zuerst mal: Ich habe mir 2 FWs angesehen, welche HMVC anbieten. Das eine initiiert die MVC Einheiten durch die Views (im Normalfall statet man ja mit dem Controller). Das andere FW bildet die hierarchiche MVC Struktur über die Controller. Sprich, Controller instanziiert Controller. Beide FWs haben eins gemeinsam: einem Nutzer ist nicht auf Anhieb klar, wie die MVC-Hierarchie nun aussieht, da die Controller in vielen verschiedenen Scripten instanziiert werden. Man müsste all diese Scripte abchecken um den Ablauf nachvollziehen zu können.
Ich dachte da jetzt an eine Zentrale Datei, in der Controller-Routen abgelegt sind. Diese Routen könnte man entweder in XML oder PHP-Arrays erstellen. Jede Route besteht aus mind. einem Basis Controller. Als Grundlage für alle Controller gibts einen Controller-Composite, über den man rekursiv alle Controller inlusive deren Methoden abarbeiten kann.
Hier mal ein Beispiel für eine Controller-Route:
Über die URL wird immer nur ein Parameter benötigt - der Name der Route - wird keiner überliefert, wird einfach die default-Controller-Route abgearbeitet. Über das Action-Attribut lassen sich Action-Methoden (wie in Zend) des Controllers definieren, welche dann eben im Composite-Controller ausgeführt werden. Durch einen senkrechten Strich (|) können beliebig viele Action-Methoden definiert werden. Mit dem Attribut return (true|false) wird angegeben, ob das Controller-Objekt Inhalt zurückliefern soll - da würde sich auch die Interzepter-Methode __toString() gut machen. Das View-Attribut gibt das Template an, das für den Controller in dieser Route bestimmt sein soll.
Bei diesem Konzept wären die Controller ohne Abhängigkeiten - Sie würden sich in beliebiger Reihenfolge zu einer Route zusammenstellen lassen. Man hätte eine sehr hohe Flexibilität. Was die MVC-Pakete angeht (bis auf die Views), hätte man maximale Wiederverwendbarkeit.
Was haltet Ihr davon? Habt ihr Einwände gegen so eine Konzept? Bis jetzt ist mir nur eins negativ aufgefallen -> die controller-routen.xml wäre eine ziemlich große Datei, da dort immerhin jede mögliche Applikation-Aktion (sprich Controller-Route) definiert werden muss.
Grüße
Ich hätte da eine Idee, wie man HMVC umsetzen könnte und würde gerne mal eure Meinung dazu hören.
Zuerst mal: Ich habe mir 2 FWs angesehen, welche HMVC anbieten. Das eine initiiert die MVC Einheiten durch die Views (im Normalfall statet man ja mit dem Controller). Das andere FW bildet die hierarchiche MVC Struktur über die Controller. Sprich, Controller instanziiert Controller. Beide FWs haben eins gemeinsam: einem Nutzer ist nicht auf Anhieb klar, wie die MVC-Hierarchie nun aussieht, da die Controller in vielen verschiedenen Scripten instanziiert werden. Man müsste all diese Scripte abchecken um den Ablauf nachvollziehen zu können.
Ich dachte da jetzt an eine Zentrale Datei, in der Controller-Routen abgelegt sind. Diese Routen könnte man entweder in XML oder PHP-Arrays erstellen. Jede Route besteht aus mind. einem Basis Controller. Als Grundlage für alle Controller gibts einen Controller-Composite, über den man rekursiv alle Controller inlusive deren Methoden abarbeiten kann.
Hier mal ein Beispiel für eine Controller-Route:
HTML:
<route name="default">
<basis controller="controllerName" action="indexAction" view="dieTemplateDatei" return="true">
<child controller="controllerFoo" action="barAction" view="dieTemplateDatei" return="true" />
<child controller="controllerFooA" action="barActionA" view="dieTemplateDatei" return="true" />
<child controller="controllerFooB" action="barActionB" view="dieTemplateDatei" return="true">
<child controller="controllerFooC" action="barActionC|andereActionMethode|nochEineDritteAction" view="dieTemplateDatei" return="true" />
</child>
</basis>
</route>
Über die URL wird immer nur ein Parameter benötigt - der Name der Route - wird keiner überliefert, wird einfach die default-Controller-Route abgearbeitet. Über das Action-Attribut lassen sich Action-Methoden (wie in Zend) des Controllers definieren, welche dann eben im Composite-Controller ausgeführt werden. Durch einen senkrechten Strich (|) können beliebig viele Action-Methoden definiert werden. Mit dem Attribut return (true|false) wird angegeben, ob das Controller-Objekt Inhalt zurückliefern soll - da würde sich auch die Interzepter-Methode __toString() gut machen. Das View-Attribut gibt das Template an, das für den Controller in dieser Route bestimmt sein soll.
Bei diesem Konzept wären die Controller ohne Abhängigkeiten - Sie würden sich in beliebiger Reihenfolge zu einer Route zusammenstellen lassen. Man hätte eine sehr hohe Flexibilität. Was die MVC-Pakete angeht (bis auf die Views), hätte man maximale Wiederverwendbarkeit.
Was haltet Ihr davon? Habt ihr Einwände gegen so eine Konzept? Bis jetzt ist mir nur eins negativ aufgefallen -> die controller-routen.xml wäre eine ziemlich große Datei, da dort immerhin jede mögliche Applikation-Aktion (sprich Controller-Route) definiert werden muss.
Grüße
Zuletzt bearbeitet: