<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Model_View_ViewModel</id>
	<title>Model View ViewModel - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Model_View_ViewModel"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Model_View_ViewModel&amp;action=history"/>
	<updated>2026-05-17T08:33:05Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Model_View_ViewModel&amp;diff=2579059&amp;oldid=prev</id>
		<title>~2025-28186-96: &quot;Korrekte&quot; Nutzung des denglischen Genitivs</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Model_View_ViewModel&amp;diff=2579059&amp;oldid=prev"/>
		<updated>2025-10-09T07:47:52Z</updated>

		<summary type="html">&lt;p&gt;&amp;quot;Korrekte&amp;quot; Nutzung des denglischen Genitivs&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:MVVMPattern.svg|miniatur|hochkant=2|MVVM-Konzept: Die Datenbindung (Data Binding) ermöglicht die Trennung von View (z.&amp;amp;nbsp;B. XAML-Markup oder HTML) und Model für die Darstellung.]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Model View ViewModel&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;MVVM&amp;#039;&amp;#039;&amp;#039;) ist ein [[Entwurfsmuster]] und eine Variante des [[Model View Controller|Model-View-Controller]]-Musters (MVC). Es dient zur Trennung zwischen Darstellung und Logik der [[Benutzerschnittstelle]] (UI) und des [[Frontend und Backend|Software-Backends]]. Das Entwurfsmuster ist die Standardimplementierung von UI-Plattformen wie [[Cocoa (API)|Cocoa]] ([[Apple]]), [[Windows Presentation Foundation]] (WPF, [[Microsoft]]) und [[JavaFX]] ([[Oracle]]). Im Webbrowser wird das Muster durch bestimmte [[JavaScript]]-[[Framework|Frameworks]] wie [[React]] oder [[Knockout.js]] verfügbar, welche den Zustand einer [[HTML5]]-Benutzeroberfläche verwalten können. Die Unterteilung der Benutzeroberfläche in [[Komponentenbasierte Entwicklung|Komponenten]], die aufeinander aufbauen und schlussendlich als View die gesamte Applikationsoberfläche darstellen, wird &amp;#039;&amp;#039;[[Kompositum (Entwurfsmuster)|Compositing]]&amp;#039;&amp;#039; genannt und ist typisch für MVVM-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Das MVVM-Entwurfsmuster erfordert neben dem Kompositum-Entwurfsmuster auch das [[Beobachter (Entwurfsmuster)|Beobachter]]-Entwurfsmuster, da das &amp;#039;&amp;#039;ViewModel&amp;#039;&amp;#039; den Zustand der UI abbildet, der sich wiederum durch Eingabe- und andere Ereignisse ändert. Die unmittelbare Reaktion der UI auf Änderungen im &amp;#039;&amp;#039;ViewModel&amp;#039;&amp;#039; und umgekehrt realisiert die [[Echtzeit]]-Datenbindung des Musters.&lt;br /&gt;
&lt;br /&gt;
MVVM erlaubte bei seiner Einführung die heute gebräuchliche Rollentrennung von UI-Designern im Frontend und Entwicklern im Backend, wodurch [[Schichtenarchitektur|Anwendungsschichten]] von verschiedenen Arbeitsgruppen entwickelt werden konnten. Im Desktop-Umfeld eingeführt, findet sich das MVVM-Entwurfsmuster heute in den meisten webbasierten Clients.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
Das MVVM wurde 2005 von [[Microsoft MVP]] John Gossman veröffentlicht. Es ist eine Spezialisierung des &amp;#039;&amp;#039;Presentation Model&amp;#039;&amp;#039; von [[Martin Fowler]]&amp;lt;ref&amp;gt;{{Internetquelle |url=https://martinfowler.com/eaaDev/PresentationModel.html |titel=Presentation Model |abruf=2025-03-27}}&amp;lt;/ref&amp;gt; und ist mit diesem insofern identisch, als beide Muster Zustand und Verhalten der View in ein separates UI-Model (Presentation bzw. View Model) verschieben. Das &amp;#039;&amp;#039;Presentation Model&amp;#039;&amp;#039; ermöglicht allerdings das Erzeugen einer View unabhängig von der UI-Plattform, wohingegen das MVVM ursprünglich auf UIs mittels WPF abzielt. Es findet allerdings inzwischen auch in anderen Bereichen Anwendung, ähnlich wie bei MVC.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
Das MVVM nutzt die funktionale Trennung des [[Model View Controller|MVC-Musters]] von Model und View. Zum Erreichen einer [[Lose Kopplung|losen Kopplung]] zwischen diesen Komponenten wird ein Datenbindungsmechanismus verwendet. Das MVVM-Muster enthält folgende drei Komponenten:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Model:&amp;#039;&amp;#039; [[Schichtenarchitektur#Datenzugriffsschicht|Datenzugriffsschicht]] für die Inhalte, die dem Benutzer angezeigt und von ihm manipuliert werden. Dazu benachrichtigt es über Datenänderungen und führt eine [[Datenvalidierung|Validierung]] der vom Benutzer übergebenen Daten durch. Es enthält die gesamte [[Geschäftslogik]] und ist für sich alleine durch [[Modultest|Unit Tests]] überprüfbar.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;View:&amp;#039;&amp;#039; Alle durch die &amp;#039;&amp;#039;grafische Benutzeroberfläche&amp;#039;&amp;#039; ([[Grafische Benutzeroberfläche|GUI]]) angezeigten Elemente. Es bindet sich an Eigenschaften des ViewModels, um Inhalte darzustellen und zu manipulieren sowie Benutzereingaben weiterzuleiten. Durch die Datenbindung ist die View einfach austauschbar und ihr [[ASP.NET#Code-Behind-Modell|Code-Behind]] gering.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;ViewModel:&amp;#039;&amp;#039; Enthält die UI-Logik (Model der View) und dient als Bindeglied zwischen View und obigem Model. Einerseits tauscht es Information mit dem Model aus, ruft also [[Methode (Programmierung)|Methoden]] oder [[Dienst (Informatik)|Dienste]] auf. Andererseits stellt es der View öffentliche [[Sprachelemente von C-Sharp#Eigenschaften (Schlüsselwörter get, set und value)|Eigenschaften]] und [[Kommando (Entwurfsmuster)|Befehle]] zur Verfügung. Diese werden von der View an [[Steuerelement]]e gebunden, um Inhalte auszugeben bzw. UI-Ereignisse weiterzuleiten. Das ViewModel darf dabei keinerlei Kenntnis der View besitzen.&lt;br /&gt;
&lt;br /&gt;
Das MVVM-Muster kann als technologie-spezifisch bezeichnet werden, da für die Verknüpfung von View und ViewModel ein Datenbindungsmechanismus benötigt wird. Diese Infrastruktur wird häufig als &amp;#039;&amp;#039;Binder&amp;#039;&amp;#039; bezeichnet.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://books.zkoss.org/zk-mvvm-book/8.0/data_binding/binder.html |titel=Binder {{!}} |abruf=2025-03-27}}&amp;lt;/ref&amp;gt; Im Detail handelt es sich hierbei um einen bidirektionalen Einsatz des [[Beobachter (Entwurfsmuster)|Beobachter-Muster]]s. &amp;#039;&amp;#039;Binder&amp;#039;&amp;#039;, welche eine Datenbindung auf Basis von deklarativen Angaben etablieren können, sind für verschiedene Techniken vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== .NET und JavaFX ===&lt;br /&gt;
In Bezug auf [[Windows Presentation Foundation|WPF]] und [[Silverlight]] bedeutet MVVM, dass die View aus rein deklarativem [[XAML]]-Markup besteht. Sie kann von UI-Designern etwa mittels [[Microsoft Expression Blend|Expression Blend]] entworfen werden, wobei lediglich Datenbindungen zum ViewModel erzeugt werden müssen, aber kein Code-Behind. Die Logik wird in einer Programmiersprache wie [[C-Sharp|C#]] oder [[Visual Basic .NET|VB.NET]] implementiert. Die Abhängigkeiten zwischen Markup und Code werden minimiert.&lt;br /&gt;
Gleiches gilt für JavaFX. Hier kann die View mittels [[FXML]] und beispielsweise SceneBuilder entwickelt und dann im ViewModel per Property Binding uni- oder bidirektional mit der Geschäftslogik verbunden werden.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript/HTML ===&lt;br /&gt;
Das MVVM-Muster bzw. der hierzu benötigte Datenbindungsmechanismus wurden im Jahr 2010 von dem Microsoft-Entwickler &amp;#039;&amp;#039;Steve Sanderson&amp;#039;&amp;#039; nach [[JavaScript]] portiert. Die entstandene JavaScript-Bibliothek trägt den Namen [[Knockout.js]]. Mittlerweile findet das MVVM-Muster ebenfalls Einsatz in anderen JavaScript-Frameworks, wie z. B. [[Angular]], [[Vue.js]] oder [[React]]. Durch die Verwendung des MVVM-Muster bei client-lastigen [[Webanwendung]]en wird der Implementierungsaufwand reduziert, da sonst übliche manuelle [[Document Object Model|DOM]]-Zugriffe durch die Datenbindung stark reduziert werden können. Die Beschreibung der Datenbindung erfolgt ebenfalls deklarativ, wie bei [[Extensible Application Markup Language|XAML]]-basierten Microsoft-Produkten.&lt;br /&gt;
&lt;br /&gt;
=== Android ===&lt;br /&gt;
&lt;br /&gt;
Das MVVM-Muster und die Datenbindung kann ebenfalls bei der Implementierung mobiler [[Android (Betriebssystem)|Android]]-Anwendungen verwendet werden.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://developer.android.com/topic/libraries/data-binding?hl=de |titel=Data Binding Library {{!}} App architecture |abruf=2025-03-27}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
* Die [[Geschäftslogik]] kann unabhängig von der Darstellung bearbeitet werden. MVVM „erbt“ die leichtere Austauschbarkeit der View vom [[Model View Controller|MVC]]-Muster.&lt;br /&gt;
* Die Testbarkeit verbessert sich, da die ViewModel die UI-Logiken enthalten und unabhängig von der View instanziiert werden können. Hierdurch sind keine UI-Tests nötig. Stattdessen genügen codebasierte [[Modultest]]s des ViewModel.&lt;br /&gt;
* Die Menge von [[Glue Code]] zwischen Model und View wird durch den Verzicht von Controller-Instanzen gegenüber dem MVC-Muster reduziert.&amp;lt;ref&amp;gt;{{cite web| author = John Gossman| title = Tales from the Smart Client: Advantages and disadvantages of M-V-VM.| url = https://blogs.msdn.com/johngossman/archive/2006/03/04/543695.aspx| accessdate=2012-05-28}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Views können von reinen UI-Designern gestaltet werden, während Entwickler unabhängig davon die Models und ViewModels implementieren.&lt;br /&gt;
* Es können unterschiedliche Views erstellt werden, die alle an dasselbe ViewModel gebunden werden, ohne dass dort Änderungen an der Programmierung vorgenommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
* Als Nachteil kann der höhere Rechenaufwand aufgrund des enthaltenen bi-direktionalen [[Beobachter (Entwurfsmuster)|Beobachter]]s gewertet werden.&lt;br /&gt;
* Der generische Datenbindungsmechanismus erspart die Implementierung von verschiedenen Controllern. Allerdings ist dieser Mechanismus zur Umsetzung des MVVM-Muster zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== MVVM-Frameworks ==&lt;br /&gt;
Es existieren verschiedene Frameworks, welche MVVM umsetzen.&lt;br /&gt;
&lt;br /&gt;
* [[Windows Presentation Foundation]]&lt;br /&gt;
* [[Knockout.js]] – MVVM in JavaScript&lt;br /&gt;
* [[Vue.js]]&lt;br /&gt;
* [[JavaFX]]&lt;br /&gt;
* [[SwiftUI]]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Model View Controller]]&lt;br /&gt;
* [[Smart UI]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Raffaele Garofalo: &amp;#039;&amp;#039;Building Enterprise Applications with Windows Presentation Foundation and the Model View ViewModel Pattern&amp;#039;&amp;#039;, Microsoft Press 2011, ISBN 978-0735650923&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://www.norberteder.com/model-view-viewmodel-die-serie/ Norbert Eder: Model-View-ViewModel Die Serie] – Codebeispiel&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste Entwurfsmuster}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Entwurfsmuster]]&lt;br /&gt;
[[Kategorie:Softwarearchitektur]]&lt;/div&gt;</summary>
		<author><name>~2025-28186-96</name></author>
	</entry>
</feed>