Verfasst von: bletra | 14. Mai 2011

WPF: Von Spaghetticode zu MVVM – Teil 9 von 9

In dieser Artikelserie habe ich eine einfache Applikation, in eine testbare Applikation nach dem MVVM-Pattern umgewandelt:

  1. Beispielapplikation mit Spaghetticode
  2. Refactoring 1: Model
  3. MVC, MVP, Presentation Model
  4. MVVM
  5. ICommand
  6. Binding
  7. Refactoring 2: ViewModel
  8. Refactoring 3: View
  9. Zusammenfassung (dieser Artikel)

Zusammenfassung

Mit dem MVVM-Architekturpattern können View und Model leicht ausgetauscht werden. D.h. sowohl die im ViewModel implementierte Präsentationslogik als auch die Geschäftslogik des Models können voneinander unabhängig automatisch getestet werden. Designer können die Gestaltung der View übernehmen und Entwickler implementieren die Präsentationslogik. Der CodeBehind-Anteil der View wird so reduziert. Es ist im Einzelfall jedoch abzuwägen, ob eine Implementation im CodeBehind-Teil nicht der teilweise umständlichen Auslagerung ins ViewModel vorzuziehen ist. Die View wird über Änderungen im ViewModel informiert. Das Model greift häufig auf Daten in einer Datenbank zu. Werden diese Daten mit einer anderen Applikation geändert, so bekommt dies die MVVM-Applikation erst bei der nächsten Datenabfrage mit.

Bei komplizierteren Oberflächen werden Sie dieses Pattern nicht wie in der hier betrachteten einfachen Beispielapplikation auf das gesamte Fenster anwenden, sondern die View aus verschiedenen UserControls zusammensetzen. Jedes UserControl ist dabei mit Verhalten und Daten nach dem MVVM-Pattern implementiert, d.h. der DataContext eines UserControls ist dann ein dazu passendes ViewModel.

Diese Artikelserie hat Ihnen die Grundlagen des MVVM-Patterns anhand der Umwandlung einer einfachen Demo-Applikation Schritt für Schritt aufgezeigt. Einige Codezeilen wiederholen sich in jeder MVVM-Applikation. Außerdem sind Konzepte zur Kommunikation zwischen Fenstern und Dialogen wünschenswert. Diese Probleme adressieren Frameworks. Da Microsoft keine MVVM-Vorlage mit VS ausliefert, gibt es unterschiedliche Open Source Frameworks — Microsoft selbst arbeitet an Prism. Die in dieser Artikelserie dargestellten Prinzipien sollten es Ihnen jedoch ermöglichen, sich in diesen Frameworks gut orientieren und sie somit effizient nutzen zu können.

Fazit

  • Das MVVM-Pattern Ist ein weit verbreitetes Muster der WPF- und Silverlight-Entwicklung.
  • Das MVVM-Pattern ist in verschiedenen Frameworks (Prism, MVVM Light, … ) unterschiedlich implementiert.
  • Das Model kapselt die Datenschicht und Geschäftslogik – analog zum Model des MVC-Patterns.
  • Die Methoden und Eigenschaften des Models werden in einem Interface definiert.
  • Das ViewModel …
    • bekommt im Konstruktor das Model (Type ist das zugehörige Interface) – Stichwort: Dependency Injektion,
    • ruft Änderungsmethoden des Models auf,
    • kennt die View nicht,
    • speichert den Zustand der View (über INotifyPropertyChanged),
    • stellt das Präsentationsverhalten in Form von Commands (ICommand) zur Verfügung.
  • Die View …
    • wird in XAML definiert,
    • DataContext ist eine Instanz von ViewModel,
    • wenig CodeBehind-Anteil,
    • kennt das Model nicht,
    • die Bindung von Eigenschaften (DependencyProperty) und Befehlen (Command) an das ViewModel wird ebenfalls in XAML definiert.
  • Das MVVM-Pattern führt zu einer abstrakteren Architektur und sollte bei Applikationen eingesetzt werden, für die man auch automatische Tests plant.

Den kompletten Quellcode der Demo-Applikation finden Sie unter: RefactorFeedManager.zip

Advertisements

Responses

  1. […] Zusammenfassung […]

  2. […] Zusammenfassung […]

  3. […] Zusammenfassung […]

  4. […] Binding, Command, MVVM, View « WPF: Von Spaghetticode zu MVVM – Teil 7 von 9 WPF: Von Spaghetticode zu MVVM – Teil 9 von 9 […]

  5. […] Zusammenfassung […]

  6. […] Zusammenfassung […]

  7. […] Zusammenfassung […]


Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Kategorien

%d Bloggern gefällt das: