Historisches

MVC ist ein sehr altes Architekturmuster, welches bereits in den frühen 70er Jahren im Rahmen der Sprache Smalltalk entwickelt wurde.

Struktur

Die Grundstruktur des Musters baut auf der Unterscheidung dreier verschiedener Objekttypen auf:

  • Model – Objekte, die persistentes Wissen (= Daten) repräsentieren und um Geschäftsprozesswissen erweitert werden;
  • View – Objekte, die Models angemessen visualisieren (d.h. in der Regel User-Interface-Klassen);
  • Controller – Objekte, die die Zusammenarbeit von Models und Views koordinieren („technische Controller“).

Die Zusammenarbeit zwischen den einzelnen Objekt(-typen) wird mittels des Observer-Musters koordiniert:

  • Der View arbeitet direkt auf dem Model als Datenpuffer.
  • Das Model ist für seine eigene Konsistenzprüfung zuständig.
  • View und Controller registrieren sich bei dem Model auf Änderungsereignisse (→Observer).
  • Das Model informiert Views und Controller über alle Änderungen.
  • Wenn eine Konsistenzprüfung fehlgeschlagen ist, macht das Model die Änderung rückgängig und informiert den View (über diese neuerliche Änderung).
  • Der Controller wird auf der Basis der Änderungen des Models ggfls. Änderungen im View vornehmen (z.B. komplexe Dialogverschaltungen…)
Anwendungen

MVC kann als Architekturmuster auf der Ebene des Dialogdesigns auftreten, aber auch in kleinerem Maßstab; so sind z.B. in der java.swing-Bibliothek viele Controlls intern nach dem MVC-Muster strukturiert.
Eine Listbox hat etwa

  • ein Model, nämlich die dahinter liegende Collection-Instanz, welche die aufgelisteten Objekte enthält;
  • einen View, d.h. die eigentlich sichtbare Listbox;
  • und einen Controller, nämlich die Instanz der Policy-Klasse (welche z.B. bestimmt, ob Single- oder Multiple-Selection möglich ist…)
MVC und ECB

Auf den ersten Blick sehen ECB und MVC sehr ähnlich aus:

  • Entities = Models
  • Boundaries = Views
  • Controls = Controller

Allerdings unterscheiden sie sich bei näherer Betrachtung erheblich hinsichtlich der Rolle der Controls/Controller: Der MVC-Controller hat rein technische Steuerungsfunktion, wohingegen das ECB-Control der designierte Ort für Geschäftsprozessfunktionalität ist (die in MVC den Model-Klassen zugewiesen wird)!

MVC trägt damit Peter Coads Erkenntnis Rechnung, dass das Daten-Layout erheblich stabiler ist, als das Geschäftsprozessmodell, wohin gegen ECB eben dieser Volatilität des Geschäftsprozessmodells Rechnung trägt, indem es die Funktionalität eines Geschäftsprozesses (= –cum grano salis– Use Case) pflegefreundlich in einem Control-Objekt kapselt.

Christian Mann 2010/10/24 14:30

 
model-view-controller.txt · Zuletzt geändert: 2010/10/24 14:32 von Christian Mann
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki