MVC im PHP-Alltag und Optimierung
Ein System, das Inhalte verwalten kann, muss noch lange nicht selbst damit umgehen können. Solche Funktionen können später hinzugefügt werden.
Mein derzeitiger Ansatz, mein CMS umzusetzen ist daher erstmal recht angenehm. Grundsätzlich kann das CMS zwar ein paar Sachen, nur eben mit Inhalten umgehen kann es nicht. Es besteht aus ein paar Klassen, die mir solche Basisfunktionalitäten wie Analyse der URL, Datenzugriff, Darstellung der Daten usw. ermöglichen.
Die tatsächlichen Strukturen sind dabei noch gar nicht festgelegt. Bislang ist es nur ein objektorientierte Rahmen, der auf dem MVC-Designprinzip basiert. Alle konkreten Funktionen werden in diesen Rahmen eingebunden.
Inspiriert wurde mein Vorgehen vom Erfolg, den „RubyOnRails“:http://www.rubyonrails.com/ derzeit feiert. Dabei habe ich mich kurz umgeschaut und dann meine Verzeichnisstruktur nach der von RoR ausgelegt. Prinzipiell mag das in Ordnung sein, tatsächlich dann aber eben doch nicht. Jedes Modul besteht aus einer Controllerklasse, einer Modelklasse und ein paar View-Dateien.
h3. Struktur
Ich habe die Begriffe anfangs nur übernommen ohne sie zu verstehen. Meine jetzige Aufteilung auf die entsprechenden Klassen ist für mich logisch, kann jedoch vom ursprünglichen Konzept abweichen.
Der Controller enthält größtenteils Steuerinformationen, gegliedert nach Aktionen wie view, edit und delete. Die model-Klasse ist für mich ein Container für die Templatetags wie get_title, get_content usw.
Da nun jedes Modul auf jeden Fall genau einen Controller und ein Model beinhaltet ist es jedoch eher kontraproduktiv, ein Modul auf
* drei Verzeichnisse und
* zwei Steuerdateien
zu verteilen.
Je ein Verzeichnis enthielt die Controller- und die Model-Dateien. Das dritte Verzeichnis enthält die View-Dateien, aus denen dann die tastächliche HTML-Seite zusammengesetzt wird. Konkret habe ich ein oder zwei Haupttemplates und mehrere Untertemplates, für jede Aktion eines.
h3. Optimierung
Bei Seitenraufrufen sucht das PHP-Skript immer nach verfügbaren Modulen und bindet die entsprechenden Dateien per „require_once“:http://php.net/require_once ein.
bq. Jeder @include@ kostet Zeit…
Naja, hier kann man dann Zeit und Ressourcen sparen. Durch eine Zusammenfassung aller Klassen eines Moduls in einer Datei wird eine von zwei Schleifen überflüssig. Zwei Schleifen? Ja, ich habe einmal nach Controllern und einmal nach Model-Klassen gesucht. Danach habe ich jede gefundene Datei eingebunden.
Eine der beiden Schleifen ist jetzt wegfallen. Das Datenvolumen wird in etwa gleich bleiben, aber die Dateisystemzugriffe gehen ziemlich zurück. Der beste Weg eine Schleife zu optimieren ist wohl immer noch, sie einfach überflüssig zu machen und zu löschen.