Model-View-ViewModell (MVVM)
Eintrag zuletzt aktualisiert am: 13.03.2022
Model View ViewModell (MVVM) ist eine Variante des
Model-View-Controler (
MVC)-Konzeptes zur Trennung von Layout und Programmcode. MVVM wird in der
Windows Presentation Foundation (WPF) und
Microsoft Silverlight angewendet. Dabei erhält die in
XAML gestaltete Benutzeroberfläche (View) alle Daten durch
Datenbindung und der Programmcode erhält alle Aktionen der Benutzeroberfläche mit Hilfe sogenannter Commands. MVVM realisiert eine klare Kompetenztrennung und eine lose Kooplung zwischen Benutzerschnittstelle und
Benutzerschnittstellensteuerung.
Hintergrund
Microsoft hat für WPF und Silverlight eine Anpassung des Model-View-Controller (
MVC)-
Entwurfsmusters erschaffen, das Model-View-ViewModell (MVVM) genannt wird. Model und View entsprechen dabei der Bedeutung im klassischen
MVC-
Entwurfsmuster. Das ViewModel kann als eine spezielle Implementierungsform eines Controllers gesehen werden, das die Aufgabe hat, die im Modell enthaltenen Informationen in einer Form aufzubereiten („adaptieren“), die die
Datenbindungstechniken in WPF und Silverlight direkt nutzen können. Das ViewModel hat auch die Aufgabe, sogenannte Commands zu implementieren, die an Ereignisse der Benutzeroberfläche gebunden werden. Das oberste Ziel von MVVM ist es, die Arbeit von Grafiker/Designern (die Views erstellen) und die Arbeit der Entwickler (die Models und ViewModels erstellen) zu trennen. Ein View enthält in reinen MVVM-Muster keinen Programmcode, sondern besteht nur als
XAML-Markup.
Vorteile
1. Bessere Trennung der Arbeit des Oberflächengestalters und des Entwicklers
2. Bessere Testbarkeit der Oberfläche (ohne Klickfolgen, stattdessen mit codebasierten Unit Tests)
3. Leichtere Austauschbarkeit des Uis
Nachteile
1. Hoher Mehraufwand im Vergleich zur klassischen Programmierung mit dem Code-Behind-Modell und Ereignissen
2. MVVM wird bisher nur sehr unzureichend durch Werkzeuge unterstützt.
Versuche, diese Situation zu verbessern
http://www.caliburnproject.org/
http://www.galasoft.ch/mvvm/getstarted/
http://www.calciumsdk.net/
http://wpfonyx.codeplex.com/