Bewährte MVC-Verfahren

Obwohl nahezu jeder Webentwickler das Model-View-Controller-Konzept kennt, entzieht sich der richtige Einsatz von MVC in realen Anwendungen oft deren Kenntnis. Die zentrale Idee hinter MVC besteht in der Wiederverwendbarkeit von Code und einer Trennung von Zuständigkeiten. In diesem Abschnitt geben wir einige allgemeine Richtlinien, wie man dem MVC-Konzept beim Entwickeln mit Yii dem besser gerecht wird.

Zum leichteren Verständnis nehmen wir eine Webanwendung an, die aus mehreren Teilapplikationen besteht, wie zum Beispiel

Die Teilapplikationen können etwa als Module oder als Yii-Anwendung, die Code mit anderen Teilapplikationen teilt, implementiert werden.

Model

Models stellen die zugrundeliegende Datenstruktur einer Webanwendung dar. Ein LoginForm-Model könnte sowohl im Frontend als auch im Backend einer Anwendung eingesetzt werden; ein News-Model könnte von Konsolenbefehlen, Web-APIs, Front- und Backend einer Anwedung benutzt werden. Models ...

Manchmal führt diese letzte Regel dazu, dass ein Model sehr "fett" wird, also zu viel Code in einer einzelnen Klasse enthält. Das kann ein Model auch schwer wartbar machen, falls der Code unterschiedlichen Zwecken dient. Zum Beispiel könnte es in einem News-Model eine Methode getLatestNews enthalten, die nur im Frontend verwendet wird. Sie könnte außerdem eine Methode getDeletedNews implementieren, die nur im Backend benötigt wird. Das mag für kleine bis mittelgroße Anwendungen noch praktikabel sein. Bei großen Applikationen kann stattdessen mit folgender Strategie die Models besser wartbar halten:

In unserem obigen Beispiel würde diese Strategie zu einem News-Model für das Frontend mit der Methode getLatestNews, sowie einem für das Backend mit getDeletedNews führen.

Allgemein sollten Models keine Logik enthalten, die direkt mit dem Endbenutzer interagiert. Genauer gesagt sollten Models ...

View

Views sind dafür verantwortlich, Models nach den Wünschen des Endbenutzers darzustellen. Allgemein gilt, dass Views ...

Views können auf verschiedene Weise wiederverwendet werden:

Controller

Controllers bilden den Leim, der Models, Views und andere Komponenten zu einer lauffähigen Anwendung verbindet. Controller sind für die Verarbeitung einer Benutzeranfrage verantwortlich. Daher gilt, Controller ...

In einer gut geplanten MVC-Anwendung sind Controller oft sehr "dünn", enthalten also vielleicht nur ein paar dutzend Zeilen an Code. Models hingegen sind sehr "fett" und enthalten den Großteil des Codes zum Manipulieren der Daten. Das liegt daran, dass die Datenstrukturen und Geschäftslogiken im Model normalerweise stark auf eine bestimmte Anwendung zugeschnitten sind, wohingegen Controllerlogik oft ähnlichen Mustern folgt. Letzerer kann also gut vereinfacht und in zugrundeliegende Basis- oder Frameworkklassen ausgelagert werden.

$Id: basics.best-practices.txt 2795 2010-12-31 00:22:33Z alexander.makarow $