Hi!
ich arbeite gerade an einem kleinen PHP-Framework. In erster Linie, weil ich die ganzen Prozesse besser verstehen will und zweitens, weil mir andere Frameworks - wie soll ich sagen - zu "überladen" sind.
Die Frage ist, welcher Funktionsumfang soll's denn sein? Je mehr Wünsche implementiert werden, desto überladener wirkt es. Du fängst mit deinem zwar klein an, aber letztlich sieht es in gewissem Rahmen auch überladen aus, wenn du Funktionalität reinbringst, die du nur für bestimmte Projekte benötigst, für das gerade betrachtete aber nicht.
Ich hatte auch schon ein kleines Framework, habe es aber vor ein paar Tagen eingemottet, da ich hierbei nicht konsequent sauber programmiert habe, was ja bekanntlich ab einem bestimmten Punkt Erweiterungen sehr erschwert.
Und dann ist die Frage, ist der Aufwand des Selbsterstellens inklusive der unvermeidlichen Tour durch den Sackgassen enthaltenden Irrgarten immer noch deutlich kleiner, als die Einarbeitung in ein bestehendes Framework? Oder spielen andere Aspekte, wie eigene Weiterbildung und dem Lernen aus Fehlern oder schlicht der Spaß an der Freude eine Rolle?
Nun zu meiner Frage: Gehört das Routing in den Bootstrap-Prozess oder ist es die Aufgabe des Front-Controllers, dies zu übernehmen?
Letzteres. (siehe auch weiter unten)
Der Front-Controller sollte doch eigentlich nur ein "vollständiges", also bereits geroutetes (gibt's dieses Wort eigentlich?) Request-Objekt bekommen und eine Antwort zurückgeben?
Wenn du schon fertig bist mit dem Routen, dann kennst du ja schon den aufzurufenden Action-Controller und hast keine Aufgabe mehr für einen Front-Controller.
Aber wohin dann mit dem Routing? In den Bootstrap-Prozess? Auch das ist für mich nicht ganz stimmig. Denn bislang war meine grobe Struktur:
Die Einteilung nach den Pattern ist nicht unbedingt eins zu eins auf Klassen zu übertragen. Es kann durchaus auch sein, dass in (d)einer Implementierung Pattern-Elemente und Klassen nicht aufeinanderfallen - nicht in dem Sinne, dass für ein Element mehrere Klassen benötigt werden sondern, dass Teile der Klassen X und Y für das Patternelement verwendet wurden und die anderen für andere Elemente. Ob das sinnvoll ist? Vermutlich nicht, denn man hat ja nicht umsonst diese Elemente und deren abgegrenzten Aufgabenbereich beschrieben. Also sollten auch deren Grenzen an den Grenzen der Programmierelemente (z.B. Klassen, Namespaces etc.) zu sehen sein.
- Anwendung wird aufgerufen: Alle für die Anwendung unabdingbaren "Prozesse" werden initialisiert und gestartet
Das ist das Bootstrapping - Urladen. Da sehe ich eigentlich nur ganz grundlegende Initialisierungsaufgaben. Der Rest ist dann eher schon Front-Controller.
- Bootstrapping: Alle optionalen Plugins, Aufgaben, etc. werden geladen und evtl. ausgeführt
Ob das noch Bootstrapping ist?
- Der Front-Controller übernimmt, delegiert also an spezielle Controller und gibt am Ende die Response aus
Der nimmt den Request entgegen (oder holt ihn sich) und routet ihn zum Ziel. Außerdem kommen weitere globale Aufgaben auf ihn zu, wie Initialisierungen für eine Lokalisierung oder das Resultat des Action-Controllers an das Ausgabemedium zu leiten.
Lo!