Samstag, 10. September 2011

No Model No Cry

Das Zend Framework hat es richtig gemacht: ein MVC-Framework, das kein M(odel) zur Verfügung stellt.

Wie kann ein MVC ohne ein M(odel) vollständig sein?

Nun, weil es nicht nur ein mögliches Model gibt. Und vielleicht auch, weil die meisten Entwickler, die aus der klassischen und ebenso gesetzten LAMP-Welt kommen, glauben, ein Model sei in erster Linie die Abbildung bzw. Umwandlung einer (statischen) Datenbankstruktur in eine objektorienterte Struktur.

Ein Model ist in erster Linie, nun ja, eben ein Modell. Und ein Modell ist immer eine vereinfachte Darstellung eines komplexen Systems oder Zusammenhangs. Das Modell eines Flugzeugs kann nicht fliegen aber man kann es im Windkanal testen. Ein Modell bildet niemals die gesamte Komplexität ab, sondern vereinfacht und abstrahiert Konzepte.

Der realen Welt, mit Objekten, die sich einen Teufel darum scheren, wie sie in statischen Strukturen abgebildet werden. Sie leben und sie tun etwas. Manche von ihnen sterben und andere werden geboren.
Allein daraus lässt sich ableiten, dass es mindestens zwei Modelle geben muss: eines für "lebendige" Objekte und eines für die statische Abbildung von Objekten, quasi für "veraltete Daten". Und in der Regel gibt es noch zwei weitere Modelle: ein Backend- und ein Frontend-Model. Zu all diesen Themen gibt es bald mehr.

Aus diesen gewagten Behauptungen erkennt man, welch weise Entscheidung Zend getroffen hat.

Welchen Sinn machen dann MVC-Frameworks überhaupt?

MVC sollte vor allem als ein logisches Pattern gesehen werden. Wie man dann V, C und M implementiert, das ist, wie so oft, für den Anwendungsfall zu entscheiden. Viel wesentlicher ist nämlich, dass man überhaupt die Dinge voneinander trennt, also statische von dynamischen Inhalten, das Lesen vom Schreiben von Daten und Objekten und lebendige von toten Objekten (also deren statischem Abbild).

Da Views und Controller meist einen ähnlichen technischen Background und Lösung von vielen wiederkehrenden Anforderungen sind (z.B. Routing), macht ein Framework sicherlich einen Sinn.
Wobei hier auch anzumerken ist, dass oftmal nur die Controller relativ simpel bleiben (sollten), Views können eine hohe Komplexität erreichen. Aber das sind Themen für andere Artikel...