Benutzer:MagicMoment/Model View ViewModel

aus Wikipedia, der freien Enzyklopädie

Das Model View Viewmodel ist ein Entwurfsmuster aus der Softwaretechnik. Es hat seinen Ursprung bei Microsoft[1] und wurde erstmals 2005 von John Gossman[2] auf der Basis einer Arbeit aus dem Jahr 2004 von Martin Fowler zum Thema Presentation Model (PM)[3] entwickelt.

Zielsetzung des MVVM-Musters ist die scharfe Trennung in der Implementation zwischen der Benutzerschnittstelle und der eigentlichen Anwendung. Es findet insbesondere in den Bereichen Windows Presentation Foundation (WPF) und Silverlight Anwendung.


Bestandteile des Musters

  • Modell (engl. Model) - steht für die eigentlichen logischen Daten (manchmal auch für die gesamte Geschäftslogik). Das Modell ist komplett unabhängig von möglichen Präsentationen.
  • Präsentation (engl. View) - stellt eine Schicht dar, die unabhängig von irgendeinem Modell Daten darstellen und Benutzerinteraktionen entgegennehmen kann. Bestandteile können z.B. Schaltflächen, Checkboxen oder Grafiken sein.
  • Präsentationsmodell (engl. ViewModel) - hat die Aufgabe, die Daten aus dem Modell in einer für die Präsentationsschicht geeigneten Form zur Verfügung zu stellen. Neben den Daten stellt es auch Funktionen bereit.
Datei:MVVM.png
Kommunikationsstruktur beim MVVM Entwurfsmuster im Falle einer Webanwendung
Datei:MVVMnormal.png
Kommunikationsstruktur beim MVVM Entwurfsmuster

Die nebenstehende Abbildung zeigt die Kommunikationsstruktur des MVVM Entwurfsmusters am Beispiel einer Webanwendung.

Das Model ist die Softwareschicht, welche die eigentlichen Applikationsdaten und Funktionen darauf zur Verfügung stellt. In der Regel liegen diese Daten allerding in einer Form und Struktur vor, die ungeeignet ist, um daran einfach eine Benutzerschnittstelle anbinden zukönnen. Beispielsweise liegen in einem Modell verschiedene Tabellen, in denen Kundendaten und Bestellungen abgelegt sind. Soll an der Benutzerschnittstelle eine Bestellliste angezeigt werden, dann wäre es einfacher, wenn die Daten bereits in Form einer Liste bereitstünden, welche die aus den Tabellen aufbereiteten Daten enthält. Diese Aufgabe kommt dem Präsentationsmodell zu. Es hält Daten und Methoden auf diesen Daten bereit und zu diesem Zweck greift es auf das Modell zu.

Die Präsentation ist vollständig vom eigentlichen Modell getrennt. Sie kommuniziert ausschließlich mit dem Präsentationsmodell, welches als Vermittler zwischen Modell und Präsentation fungiert. Diese Kommunikation findet im Idealfall nur durch Datenbindung (engl. data binding) statt. Darunter ist ein Mechanismus zu verstehen, bei dem Eigenschaften der Präsentationselemente direkt mit Eigenschaften der Objekte aus dem Präsentationsmodell verknüpft werden. Änderungen im Präsentationsmodell wirken sich somit auf die Präsentation aus, und umgekehrt können Änderungen in der Präsentation Auswirkungen auf das Präsentationsmodell haben.

Die durch dieses Entwurfsmuster erzielte klare Trennung der Benutzerschnittstelle von der eigentlichen Anwendung hat in der Praxis zwei wichtige Auswirkungen auf den Softwareentwicklungsprozess:

  • Klare Trennung der Rollen Anwendungsentwickler und Benutzerschnittstellen-Designer - Neben dem Modell realisiert der Anwendungsentwickler auch das Präsentationsmodell. Er beschäftigt sich jedoch nicht mit der konkreten Ausgestaltung der Benutzerschnittstelle. Dies ist die Aufgabe des Designers. Er legt nicht nur so einfache Bestandteile wie Farben oder Schriften fest, sondern er entscheidet auch, welche Steuerelemente zur Darstellung der Daten aus dem Präsentationmodell und für die Interaktionen auf diesen Daten verwendet werden.
  • Das Testen von Anwendungen wird erleichter. - Bislang ist es schwierig, Anwendungen über ihre Benutzerschnittstellen automatisiert zu testen. Mit dem Abkoppeln von der Präsentation ist nun möglich, unabhängig von einer konkreten Benutzerschnittstelle eine Anwendung über das Präsentationsmodelle zu testen. Und da dies in Form von Programmcode realisiert ist, greifen hier automatisierte Testmethoden (wie z.B. Unittests).

Siehe auch

Weblinks

Einzelnachweise

Kategorie:Entwurfsmuster Kategorie:Softwarearchitektur