Christian Vogt HAW Hamburg 19. Dezember 2011
Inhaltsverzeichnis 1 Prolog Einleitung Entwurfsmuster andere Muster 2 Model-View-Controller Hintergrund Konzept Umsetzung 3 Beispiele Überblick Beispiel in Java Beispiel in Swing 4 Alternativen zu MVC Beispiele 5 Fazit
Einleitung Was soll euch dieser Vortrag vermitteln? Fragestellung Was ist das MVC-Pattern? Warum/Wofür gibt es das Pattern? Wie wird es umgesetzt? Gibt es Alternativen? Wo kann ich mich weiter informieren?
Entwurfsmuster Was kennzeichnet ein Entwurfsmuster? [frei nach wikipedia.de] ein begrenztes Problem lösen ein erprobtes Konzept bieten auf realen Designs basieren über das rein Offensichtliche hinausgehen den Benutzer in den Entwurfsprozess einbinden Beziehungen aufzeigen, die tiefergehende Strukturen und Mechanismen eines Systems umfassen.
andere Muster Was gibt es noch? Gang of Four Die meisten Entwurfsmuster sind 1994 von der Gang of Four definiert worden andere Musterarten Beispiele für Muster, welche keine Entwurfsmuster sind Analysemuster Idiome Kommunikationsmuster Organisationsmuster Antimuster Architekturmuster
andere Muster Was kennzeichnet ein Architekturmuster? Entwurfsmuster beschreiben die Lösung eines lokalen Problems Architekturmuster beschreiben eine Grundstruktur Entwurfsmuster sind im Kleinen das, was Architekturmuster im Großen sind Architekturmuster ziehen sich durch die ganze Anwendung
andere Muster Kategorien von Architekturmustern[wikipedia.de] Chaos zu Struktur (engl. Mud-to-structure) Verteilte Systeme Interaktive Systeme Adaptive Systeme
andere Muster Kategorien und Beispiele von Architekturmustern Chaos zu Struktur (engl. Mud-to-structure) Pipes und Filter Schichtenarchitektur Domain-Driven Design Data Context Interaction Verteilte Systeme Serviceorientierte Architektur Broker bzw. Vermittler Client-Server Interaktive Systeme Model-View-Controller (MVC) Presentation-Abstraction-Control (PAC) Adaptive Systeme Mikrokernel Reflexion Dependency Injection [Michael Kircher, Prashant Jain: Pattern-Oriented Software Architecture. Patterns for Resource Management.
Hintergrund Was genau ist das MVC-Pattern? Eine allgemeine Konzeptidee für Benutzeroberflächen.
Hintergrund Konzept stammt von Trygve Reenskaug (Xerox), 1979 Erste Umsetzung für Benutzeroberflächen in Smalltalk-80
Konzept Strukturierung Aufteilung von Software in die drei Einheiten: Datenmodell (engl. model) Zustand Präsentation (engl. view) Anzeige Programmsteuerung (engl. controller) Verhalten
Konzept Konzeptdiagramm durchgezogen: direkte Assoziation gestrichelt: indirekte Assoziation (z.b. über Observer)
Konzept Komponente: Modell (model) Kennt den Zustand des Systems Gibt Informationen zurück (meist an den View) Reagiert auf Änderungen (meist ausgelöst von Controllern) In Event-basierten Systemen übernimmt das Model die Rolle des Oberservable (mit den Views als Observer)
Konzept Komponente: Präsentation (view) Enthält die Anzeigeelemente Es kann viele Views geben, die ein gemeinsames Model verwenden z.b. ein Formularfeld
Konzept Komponente: Steuerung (controller) Erhält Usereingaben und initiiert eine Antwort, in dem das Model aufgerufen wird z.b. eine Formulareingabe, die an das Model weitergereicht wird Es kann viele Views geben, die einen gemeinsamen Controller verwenden
Konzept Warum/Wofür gibt es das Pattern? Mit steigender Komplexität von Benutzeroberflächen wurde ein Konzept unabdingbar Ziel des Musters ist ein flexibler Programmentwurf, der eine spätere Änderung oder Erweiterung erleichtert und eine Wiederverwendbarkeit der einzelnen Komponenten ermöglicht.[wikipedia.de]
Umsetzung Wie wird es umgesetzt? (... )
Umsetzung Kontrollfluß 1 Ein Benutzer interagiert mit einer grafischen Oberfläche 2 Ein Controller reagiert auf den Benutzer mit Hilfe eines generierten Events (z.b. Mausklick) und führt eine entsprechende Aktion aus 3 Der Controller benachrichtigt das Model über die Aktion, was zu einer Änderung in diesem führen kann 4 Der View aktualisiert seine Anzeige 5 Der View wartet auf weitere Benutzereingaben (zurück zu 1)
Umsetzung Kontrollfluß 1 Ein Benutzer interagiert mit einer grafischen Oberfläche 2 Ein Controller reagiert auf den Benutzer mit Hilfe eines generierten Events und führt eine entsprechende Aktion aus 3 Der Controller benachrichtigt das Model über die Aktion, was zu einer Änderung in diesem führen kann 4 Der View aktualisiert seine Anzeige 5 Der View wartet auf weitere Benutzereingaben zurück zu 1 Beispiel 1 Ein Artikel wird über einen Button in den Warenkorb gelegt 2 Im Controller wird der Event-Handler addtoshoppingcart() aufgerufen. 3 Im Model wird dem Warenkorb ein Artikel hinzugefügt. 4 Die Anzeige wird aktualisiert und der neu hinzugefügte Artikel wird angezeigt 5 Warten.
Umsetzung Unterschiedliche Implementierungen Durch unterschiedliche Implementierungsvarianten gibt es nicht definierte Funktionalitäten Beispiel: Formularvalidierung In der View oder im Model? Je nach Anwendungsfall!
Umsetzung Unterschiedliche Implementierungen Durch unterschiedliche Implementierungsvarianten gibt es nicht definierte Funktionalitäten Beispiel: Datenaktualisierung des View Observer-Pattern zur Aktualisierung der Anzeige HTML Request-Response-Cycle
Umsetzung Oft verwendete Begrifflichkeiten Fat Model, Skinny Controller Fat Controller - AntiPattern Fat View
Überblick 1 Einfaches Beispiel in Java 2 Verwendung in Java Swing
Beispiel in Java Einfaches Beispiel in Java Eclipse-Projekt MVC-Easy
Beispiel in Swing Umsetzung in Swing später!
Gibt es Alternativen? Ja!
Beispiele Ausbildungen des MVC-Pattern Model-View-Presenter Model-View-ViewModel (Microsoft WPF) Model-ViewController (Swing)
Beispiele MVC mit Fokus auf Testbarkeit: Model-View-Presenter Motivation Tests von Oberflächen sind schwierig Komplizierte Automatisierung Grundgedanke des MVP-Patterns Die eigentliche Darstellung (den View) komplett von technischer und fachlicher Logik freihalten[praxisbuch Objektorientierung - Galileo]
Beispiele MVC mit Fokus auf Testbarkeit: Model-View-Presenter Umsetzung Passive View -Ansatz View von jeglicher Logik freihalten Keine Kommunikation zwischen View und Model Presenter kennt nur ein View-Interface View-Interface kann von einem Mock -Objekt implementiert werden UI-Logik lässt sich Testen
Beispiele MVC von Microsoft: Model-View-ViewModel Umsetzung Ähnelt stark MVP Das ViewModel kennt keinerlei View-Komponenten wird in Windows Presentation Forms verwendet
Beispiele Vereinfachtes MVC: Model-ViewController Prinzip Controller erledigen oft sehr gleichförmige Aufgaben View und Controller werden zu einem UI-Element zusammengefasst Verwendung in Java Swing Beispiel folgt
Beispiele Vereinfachtes MVC: Model-ViewController Java Swing Beispiel Eclipse-Projekt MVC-Swing
Fazit Eine Separierung nach dem Prinzip des MVC oder einem abgeleiteten Pattern ist grundsätzlich sinnvoll MVC ist kein Allheilmittel, sondern nur ein Ansatz zur Problemlösung Das Problem an sich muss selbst gelöst werden
Wo kann ich mich weiter informieren? Quellen für diesen Vortrag Swing: Java ist auch eine Insel, http://java.sun.com/products/jfc/tsc/articles/architecture/ WPF: http://msdn.microsoft.com/de-de/magazine/cc785479.aspx MVP: http://www.wildcrest.com/potel/portfolio/mvp.pdf, http://openbook.galileocomputing.de/oo
Vielen Dank für die Aufmerksamkeit!