InfoHome | Themen | Projekte | Links | Software |
|
Das Model-View-Controller PatternBeim MVC-Modell handelt es sich um ein Architekturmuster zur Trennung eines Programms in die drei Einheiten Datenmodell (Model), Präsentation (View) und Programmsteuerung (Controller). Ziel des Modells ist ein flexibles Programmdesign, um u.a. eine spätere Änderung oder Erweiterung einfach zu halten und die Wiederverwendbarkeit der einzelnen Komponenten zu ermöglichen. Außerdem sorgt das Modell bei großen Anwendungen für eine gewisse Übersicht und Ordnung durch Reduzierung der Komplexität. Gleichzeitig bringt die Trennung auch eine Rollenverteilung mit sich. Fachkräfte können so optimal, ihrer Fähigkeit entsprechend, eingesetzt werden: Ein Gestalter oder GUI-Designer erstellt das grafische Erscheinungsbild, der Programmierer erstellt die nötige Geschäftslogik, Datenbankexperten kümmern sich um die optimale Datenverwaltung usw. ModelDas Datenmodell enthält die dauerhaften (persistenten) Daten der Anwendung. Das Model hat also Zugriff auf diverse Backend-Speicher wie zum Beispiel Datenbanken. Das Model kennt weder die View noch den Controller, es weiß also gar nicht, wie, ob und wie oft es dargestellt und verändert wird. Änderungen im Model werden allerdings über einen Update-Mechanismus bekannt gegeben, indem ein Event ausgelöst wird. Dazu muß sich zumindest die View als abhängiges Objekt am Model registrieren, um über Datenänderungen informiert zu werden. ViewDie Darstellungsschicht präsentiert die Daten in der Regel - jedoch nicht notwendigerweise - zwecks Anzeige. Die Programmlogik sollte aus der View entfernt werden. Die View kennt das Model und ist dort registriert, um sich selbständig aktualisieren zu können. Controller
Die Steuerungsschicht realisiert die eigentliche Geschäftsintelligenz und
bildet mit Hilfe der anderen Schichten die Prozesse ab. Sie steuert den
Ablauf, verarbeitet Daten, entscheidet, welche View aufgerufen wird, etc.
[Quelle: de.wikipedia.org] Beispiel 'Counter'
Am Beispiel eines einfachen Counters soll das MVC-Pattern demonstriert werden.
Die Klasse Counter
Die Klasse Counter repräsentiert unser 'Model'. Bei dieser einfachen Anwendung
speichert ein Objekt vom Typ Counter lediglich den derzeitigen Zählerstand.
Mit Hilfe der Methode incr() lässt sich der Zählerstand verändern.
import java.util.Observable;
Die Klasse ViewLabelDie Klasse ViewLabel repräsentiert eine 'View'-Komponente, die wir als Custom-JPanel realisieren. Views möchten benachrichtigt werden, wenn sich unser model ändert. Aus diesem Grund muss unsere View-Klasse das Observer-Interface - mit seiner einzigen Methode update() - zu implementieren. Innerhalb der Methode update() werden nun die Aktionen programmiert, die bei einer Veränderung des überwachten Objektes ausgelöst werden sollen. Die Parameter dieser Methode sind zum einen eine Referenz auf das überwachte Objekt, das seinen Status verändert hat, und zum anderen das (Integer-)Objekt, das der Methode notifyObservers() innerhalb unserer Counter-Klasse als Argument übergeben worden ist.
import java.awt.*;
Die Klasse ViewColor
Auch die Klasse ViewColor stellt eine 'View'-Komponente im Sinne des
MVC-Patterns dar. Anstatt den aktuellen Wert anzuzeigen, zeigt diese View nur
eine grün Fläche, falls der aktuelle Counter-Wert größer oder gleich Null ist,
oder eine rote Fläche, wenn der Wert kleiner als Null ist. Diese Klasse erbt
jetzt von ViewLabel und braucht deswegen das Observer-Interface nicht mehr
explizit zu implementieren (das tun ja ViewLabel-Objekte bereits). In diesem
Fall überschreiben wir die update()-Methode, die von der Klasse ViewLabel
vererbt wird.
import java.awt.Color;
Die Klasse ModelViewController
Schließlich bleibt noch der Controller. Innerhalb dieser Klasse bauen wir die
gesamte grafische Oberfläche zusammen. Unsere beiden 'Views' werden beim
'Model' als Observer registriert. Mit Hilfe von zwei Action-Listenern werden
die Buttons zum Hoch- und Runterzählen überwacht. In den zugehörigen
actionPerformed()-Methoden wird der Counter-Stand durch Aufruf der Methode
incr() mit entsprechendem Paramter verändert. Zur Initialisierung des Counters
wird die Methode incr() zunächst mit dem Argument 0 aufgerufen.
import java.awt.*;
|
© 2004-2024 M. Blanke · Ursulaschule · Kleine Domsfreiheit 11-18 · 49074 Osnabrück |