Das M im MVC-Entwurfsmuster

Ich habe vor einiger Zeit einmal über die nicht vorhandene Komponente Zend_Model geschrieben und dort den Stand der Dinge aus meiner Sicht zusammen gefasst. Das Kapitel zum Thema Models in meinem Zend Framework Buch ist bereits fast 20 Seiten lang und es wächst irgendwie immer weiter. Ich werde wohl an anderer Stelle kürzen müssen… ;-(

Heute bin ich nun auf einen Beitrag im Blog von Padraic Brady gestossen. Das Blog hatte ich schon länger abonniert, es war im Sommer aber längere Zeit nicht erreichbar, so dass ich irgend wann den Feed aus meinem Feedreader geworfen habe. Padraics Beitrag über das M im MVC ist aber ein guter Grund dort vorbei zu schauen. Vor der Lektüre möchte ich ein paar Warnungen aussprechen. Der Beitrag ist lang, auf Englisch und enthält nur Gedanken, keinen Programmcode.

Eine kurze Zusammenfassung der wesentlichen Punkte:

  • Models werden in einer MVC-Architektur oft missverstanden und mit dem reinen Zugriff auf die Daten gleichgesetzt
  • Fat Models, also Modelklassen, die so viel Logik wie möglich enthalten, sollten gegenüber schlanken Models bevorzugt werden
  • Viele Entwickler packen den Großteil der Applikationslogik in den Controller und erschweren damit die Portabilität, Wartbarkeit und Testbarkeit der ganzen Anwendung
  • Die Applikationslogik sollte stattdessen so weit wie möglich in das Model wandern und die Controller sollten so schlank wie möglich sein
  • Der View soll über View-Helper lesend auf das Model zugreifen; Controller, welche nur Daten aus einem Model lesen und an den View übergeben, sollten vermieden werden

Ich empfehle jedem ambitionierten Entwickler, den Beitrag von Padraic aufmerksam durchzulesen und sich die ein oder andere Idee dort näher anzuschauen. Ich weiss, dass es ohne Programmcode sehr schwierig ist, aber dennoch lernt man einiges beim Lesen.

4 Antworten für “Das M im MVC-Entwurfsmuster”

  1. Nils Langner sagt:

    Echt lustig, bin letzte Woche auch genau über diesen Beitrag gestolpert. Aber Padraic hat in den meisten Dingen vollkommen Recht.

  2. Axel Wüstemann sagt:

    Ich verfahre auch so. Allerdings bin ich etwas ratlos hinsichtlich der Ordnerstruktur. Die übliche Struktur controllers/models/views wird dem ja kaum gerecht, weil sie eher eine direkte Zuordnung eines Models zu einem Controller unterstützt. Dies würde eher der Auffassung eines Models als Speicherort entsprechen. Models sollten daher vielleicht besser in eine Applikationsbibliothek ausgelagert sein? Die Ablagestruktur ergibt sich aus der gewählten Klassenstruktur. Im Modelbereicht müssten ja die vielen anderen Entwurfsmuster zum Einsatz kommen…

  3. Ralf Eggert sagt:

    @Axel,

    wie bei vielen Dingen kommt es darauf an. Wenn du deine Applikation in Module aufteilst und ein Model nur in einem Modul benötigt wird, dann macht es durchaus Sinn, dies im entsprechenden Verzeichnis des Moduls zu speichern. Wenn ein Model aber in mehreren Modulen verwendet wird, könnte es Sinn machen, dieses entweder in einem separaten Modul oder im default Modul zu speichern.

    Da Models meiner Meinung nach sehr häufig applikationsspezifisch sind, würde ich sie schon im Verzeichnis application/ speichern und nicht unter library/. Im Endeffekt ist dies aber auch Auslegungssache und hängt stark vom Projekt ab.

    Gruss,

    Ralf

  4. » Models im Zend Framework (I) - comfuzius - Fachchinesisch für Entwickler sagt:

    [...] Ralf Eggert: Das M im MVC-Entwurfsmuster [...]

Hinterlasse eine Antwort