Model View Controller Pattern - users.etech.haw

Transcrição

Model View Controller Pattern - users.etech.haw
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Model View Controller Pattern
Christian Vogt
HAW Hamburg
19. Dezember 2011
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Inhaltsverzeichnis
1 Prolog
2
3
4
5
Einleitung
Entwurfsmuster
andere Muster
Model-View-Controller
Hintergrund
Konzept
Umsetzung
Beispiele
Überblick
Beispiel in Java
Beispiel in Swing
Alternativen zu MVC
Beispiele
Fazit
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
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?
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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.
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
andere Muster
Kategorien von Architekturmustern[wikipedia.de]
• Chaos zu Struktur (engl. Mud-to-structure)
• Verteilte Systeme
• Interaktive Systeme
• Adaptive Systeme
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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.
Model View
Controller
Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Hintergrund
Was genau ist das MVC-Pattern?
• Eine allgemeine Konzeptidee für Benutzeroberflächen.
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Hintergrund
• Konzept stammt von Trygve Reenskaug (Xerox), 1979
• Erste Umsetzung für Benutzeroberflächen in Smalltalk-80
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Konzept
Strukturierung
Aufteilung von Software in die drei Einheiten:
• Datenmodell (engl. model) →Zustand
• Präsentation (engl. view) →Anzeige
• Programmsteuerung (engl. controller)→Verhalten
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Konzept
Konzeptdiagramm
durchgezogen: direkte Assoziation
gestrichelt: indirekte Assoziation (z.B. über Observer)
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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)
”
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Konzept
Komponente: Präsentation (view)
• Enthält die Anzeigeelemente
• Es kann viele Views geben, die ein gemeinsames Model
verwenden
• z.B. ein Formularfeld
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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]
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Umsetzung
Wie wird es umgesetzt?
(. . . )
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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)
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Umsetzung
Kontrollfluß
Beispiel
1
Ein Benutzer interagiert mit einer grafischen
Oberfläche
1
Ein Artikel wird über einen Button in den
Warenkorb gelegt
2
Ein Controller reagiert auf den Benutzer mit Hilfe
eines generierten Events und führt eine
entsprechende Aktion aus
2
Im Controller wird der Event-Handler
addToShoppingCart()“ aufgerufen
”
.
3
Der Controller benachrichtigt das Model über die
Aktion, was zu einer Änderung in diesem führen
kann
3
Im Model wird dem Warenkorb ein Artikel
hinzugefügt
.
4
Der View aktualisiert seine Anzeige
4
Die Anzeige wird aktualisiert und der neu
hinzugefügte Artikel wird angezeigt
5
Der View wartet auf weitere Benutzereingaben
5
Warten
zurück zu 1
Model View Controller Pattern
.
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Umsetzung
Unterschiedliche Implementierungen
Durch unterschiedliche Implementierungsvarianten gibt es nicht
definierte Funktionalitäten
Beispiel: Formularvalidierung
• In der View oder im Model?
• Je nach Anwendungsfall!
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Umsetzung
Oft verwendete Begrifflichkeiten
• Fat Model, Skinny Controller
• Fat Controller - AntiPattern
• Fat View
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Überblick
1
Einfaches Beispiel in Java
2
Verwendung in Java Swing
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Beispiel in Java
Einfaches Beispiel in Java
Eclipse-Projekt MVC-Easy
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Beispiel in Swing
Umsetzung in Swing
später!
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Gibt es Alternativen?
Ja!
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Beispiele
Ausbildungen des MVC-Pattern
• Model-View-Presenter
• Model-View-ViewModel (Microsoft WPF)
• Model-ViewController (Swing)
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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]
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Beispiele
MVC von Microsoft: Model-View-ViewModel
Umsetzung
• Ähnelt stark MVP
• Das ViewModel kennt keinerlei View-Komponenten
• wird in Windows Presentation Forms verwendet
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Beispiele
Vereinfachtes MVC: Model-ViewController
Java Swing Beispiel
Eclipse-Projekt MVC-Swing
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
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
Model View Controller Pattern
C. Vogt
Prolog
Model-View-Controller
Beispiele
Alternativen zu MVC
Fazit
Vielen Dank für die Aufmerksamkeit!
Model View Controller Pattern
C. Vogt