Das Model-View-Controller Pattern

Begriffsklärung MVC

Die Abkürzung "MVC" steht für "Model", "View" und "Controller". Diese drei Bestandteile bilden den Kern des MVC-Modells.1 Es wird eingesetzt, um einen einheitlichen Aufbau von Klassen, Methoden und Paketen zu definieren sowie den Ablauf von zusammenarbeitenden Komponenten in einer Oberfläche zu strukturieren.
Dabei werden die drei Komponenten "Oberfläche", "Controller" und "Modell" aus der Anwendung herausgetrennt und voneinander unabhängig betrachtet: Als "Oberfläche" wird das UI2 für den Benutzer bezeichnet. Auf ihr befinden sich grafische Elemente wie Buttons, Checkboxen oder Listen. In der Oberfläche ist keine Logik enthalten, so dass bei alleiniger Auslieferung lediglich ein einfacher Clickdummy vorzufinden wäre.
Die eigentlichen Daten (etwa Inhalte für Listboxen oder Einträge von Tabellenzeilen) werden durch das "Modell" definiert. Häufig werden Daten, z. B. die Liste aller Einträge in einem elektronischen Telefonbuch, in einer Datenbank persistiert. Die Aufgabe des Modells ist es, diese auszulesen, zu schreiben oder zu aktualisieren und über definierte Schnittstellen zur Verfügung zu stellen.


Controllerschicht

Um Abhängigkeiten zwischen den beiden Schichten zu vermeiden, wird eine dritte Schicht, der "Controller", erstellt. Dieser ist verantwortlich für die Kommunikation zwischen der Oberfläche und dem Modell. Der Vorteil dieser Komponente besteht darin, dass es keine Abhängigkeit zwischen der "View" und dem "Model" gibt. Aufgrund der Tatsache, dass View und Model keinerlei Informationen übereinander besitzen, können beide Schichten ausgetauscht werden, ohne die jeweils andere ändern zu müssen (Prinzip der losen Kopplung). Dies ist beispielsweise dann der Fall, wenn eine bestehende Datenbank neben einer Web-Oberfläche auch durch eine Swing-Oberfläche3 bedient werden soll. Zwar muss die View-Schicht in jedem Fall neu programmiert werden, jedoch kann der Controller Model komplett übernehmen. Abbildung 4 verdeutlicht das Zusammenspiel der drei Komponenten "Model", "View" und "Controller": Abbildung 4: MVC-Struktur Quelle: Eigene Darstellung Abbildung 4 verdeutlicht, dass View und Model voneinander unabhängig sind und lediglich über den Controller eine Verknüpfung besteht. Innerhalb der einzelnen Schichten werden nun weitere Muster angewandt. So kann beispielsweise bei der Umsetzung des Models das Observer-Muster angewandt werden. Dabei wird eine View-Komponente (z. B. eine Listbox) durch den Controller bei dem Model registriert. Sobald das Model eine Änderung an den Daten vornimmt, kann es die durch den Controller registrierte View-Komponente benachrichtigen. Diese aktualisiert daraufhin den Inhalt in der View. Zwar lässt diese Verbindung auf eine Abhängigkeit zwischen View und Model schließen, jedoch existiert genau diese nicht. Durch den Einsatz von speziellen Observer-Klassen wird die Verbindung entkoppelt und kann für andere View-Komponenten, z. B. eine Swing-Oberfläche, erneut und ohne zusätzlichen Programmieraufwand im Model registriert werden. Abbildung 5 zeigt den Ablauf innerhalb des MVC-Modells: Abbildung 5: Kreislauf im MVC-Modell Quelle: Eigene Darstellung in Anlehnung an Entwurfsmuster, Ausgabe 2006, Seite 530 Innerhalb der View-Schicht kommt in der Regel das Decorator-Pattern zum Einsatz. Bei diesem werden grafische Elemente ineinander geschachtelt und bilden somit ein neues Element. Als Beispiel kann eine Tabelle zur Anzeige von Personendaten dienen, welche sich in einem scrollbaren Rahmen befindet, der wiederum in einem Fenster platziert ist. Die Verschachtelungstiefe solcher Strukturen ist beliebig. Sie ist abhängig von den jeweiligen Anforderungen an die Oberfläche.