<?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_Presenter</id>
	<title>Model View Presenter - 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_Presenter"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Model_View_Presenter&amp;action=history"/>
	<updated>2026-05-21T22:51:32Z</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_Presenter&amp;diff=1316549&amp;oldid=prev</id>
		<title>imported&gt;Acky69: zus. Links, ZS, Floskel raus</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Model_View_Presenter&amp;diff=1316549&amp;oldid=prev"/>
		<updated>2022-10-16T10:28:12Z</updated>

		<summary type="html">&lt;p&gt;zus. Links, ZS, Floskel raus&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Model View Presenter.png|mini|300px|Der Presenter beinhaltet die Logik der Anwendung. Er ist die Verbindung zwischen dem Modell und der Sicht.]]&lt;br /&gt;
&lt;br /&gt;
{{lang|en|&amp;#039;&amp;#039;&amp;#039;Model View Presenter&amp;#039;&amp;#039;&amp;#039;}} (Abkürzung &amp;#039;&amp;#039;&amp;#039;MVP&amp;#039;&amp;#039;&amp;#039;; wörtlich etwa ‚Modell-Ansicht-Präsentierer‘) ist ein [[Entwurfsmuster]] in der [[Softwareentwicklung]], das aus dem {{lang|en|[[Model View Controller]]}} (MVC) hervorgegangen ist. Es beschreibt einen neuartigen Ansatz, um das Modell (engl. {{lang|en|&amp;#039;&amp;#039;model&amp;#039;&amp;#039;}}) und die Ansicht (engl. {{lang|en|&amp;#039;&amp;#039;view&amp;#039;&amp;#039;}}) komplett voneinander zu trennen und über einen Präsentierer (engl. {{lang|en|&amp;#039;&amp;#039;presenter&amp;#039;&amp;#039;}}) zu verbinden. Dabei steht neben einer deutlich verbesserten [[Testbarkeit]] auch die strengere Trennung der einzelnen Komponenten im Gegensatz zu&amp;amp;nbsp;MVC im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
Erstmals eingesetzt und genannt wurde dieses Entwurfsmuster in den 1990er-Jahren von [[IBM]] und [[Taligent]]. [[Martin Fowler]] formulierte jedoch im Jahre 2004 {{lang|en|&amp;#039;&amp;#039;model-view-presenter&amp;#039;&amp;#039;}} nach seinem Verständnis. Seine Definition ist heute ausschlaggebend.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
MVP basiert wie MVC auch auf drei Komponenten: Dem Modell ({{lang|en|&amp;#039;&amp;#039;model&amp;#039;&amp;#039;}}), der Ansicht ({{lang|en|&amp;#039;&amp;#039;view&amp;#039;&amp;#039;}}) und dem Präsentierer ({{lang|en|&amp;#039;&amp;#039;presenter&amp;#039;&amp;#039;}}).&lt;br /&gt;
&lt;br /&gt;
; Model&lt;br /&gt;
: Das &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; stellt die Logik der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; dar. Dies kann auch die [[Geschäftslogik]] sein. Über das &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; muss jedoch alle Funktionalität erreichbar sein, um die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; betreiben zu können. Die Steuerung des &amp;#039;&amp;#039;Modells&amp;#039;&amp;#039; erfolgt allein vom &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039;. Das &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; selbst kennt weder die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; noch den &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039;.&lt;br /&gt;
; View&lt;br /&gt;
: Die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; enthält keinerlei steuernde Logik und ist nur allein für die Darstellung und die Ein- und Ausgaben zuständig. Sie erhält weder Zugriff auf die Funktionalität des &amp;#039;&amp;#039;Präsentierers&amp;#039;&amp;#039; noch auf das &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039;. Sämtliche Steuerung der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; erfolgt durch den &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039;.&lt;br /&gt;
;Presenter&lt;br /&gt;
: Der &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; ist das Bindeglied zwischen &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039;. Er steuert die logischen Abläufe zwischen den beiden anderen Schichten und sorgt dafür, dass die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; ihre Funktionalität erfüllen kann.&lt;br /&gt;
&lt;br /&gt;
Damit MVP seine eigentlichen Vorteile gegenüber&amp;amp;nbsp;MVC entfalten kann, werden für &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; jeweils [[Schnittstelle]]n (engl. {{lang|en|&amp;#039;&amp;#039;Interfaces&amp;#039;&amp;#039;}}) verwendet. Sie definieren den genauen Aufbau beider Schichten, und der &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; verknüpft lediglich die Schnittstellen miteinander. Dies gewährleistet die vollständige Austausch- und Wiederverwertbarkeit des &amp;#039;&amp;#039;Modells&amp;#039;&amp;#039; und der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039;. Resultierend aus der Austauschbarkeit der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; lässt sich so vor allem ein {{lang|fr|&amp;#039;&amp;#039;double&amp;#039;&amp;#039;}} ({{frS}} für &amp;#039;&amp;#039;Doppelgänger&amp;#039;&amp;#039;) für die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; verwenden, um die Funktionalität aus Perspektive der Oberfläche mit [[Modultest]]s (engl. {{lang|en|&amp;#039;&amp;#039;unit tests&amp;#039;&amp;#039;}}) zu prüfen.&lt;br /&gt;
&lt;br /&gt;
Im Jahre 2006 entschied sich Martin Fowler, aufgrund von Erkenntnissen bei der praktischen Anwendung von MVP, das ursprüngliche Entwurfsmuster in zwei differenzierte Muster aufzuteilen&amp;lt;ref&amp;gt;[http://www.martinfowler.com/eaaDev/ModelViewPresenter.html {{lang|en|Retirement note for Model View Presenter Pattern}}] (englisch)&amp;lt;/ref&amp;gt;: {{lang|en|&amp;#039;&amp;#039;Supervising Controller&amp;#039;&amp;#039;}} und {{lang|en|&amp;#039;&amp;#039;Passive View&amp;#039;&amp;#039;}}. Beide Muster unterscheiden sich hinsichtlich ihrer Testbarkeit und ihrer Handhabung.&lt;br /&gt;
&lt;br /&gt;
=== {{lang|en|Supervising Controller}} ===&lt;br /&gt;
{{lang|en|&amp;#039;&amp;#039;Supervising Controller&amp;#039;&amp;#039;}} (wörtlich etwa „Überwachende Steuerung“) ist ein Entwurfsmuster, das aus der ursprünglichen Variante von MVP hervorgegangen ist und von Martin Fowler definiert wurde. Hierbei übernimmt die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; möglichst alle Aufgaben zur Datensynchronisation, während sich der &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; um alle anderen Abläufe zwischen &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; kümmert. Um die Synchronisation möglichst zu vereinfachen, kann auf [[Datenbindung|Datenbindungen]] (engl. {{lang|en|&amp;#039;&amp;#039;data bindings&amp;#039;&amp;#039;}}) zurückgegriffen werden. Dabei stellt der &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; Daten über Klassen bereit, die der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; und dem &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; bekannt sind. Der &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; selbst sorgt nur noch für die Übertragung der Datenobjekte vom &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; zur &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039;. Hierdurch entfällt weiterer Synchronisationsaufwand vom &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039;, da sich die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; selbständig über die Datenobjekte synchronisiert. Das &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; kann seinerseits ebenfalls über die Datenobjekte auf innerhalb der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; veränderte Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
=== {{lang|en|Passive View}} ===&lt;br /&gt;
{{lang|en|&amp;#039;&amp;#039;Passive View&amp;#039;&amp;#039;}} (wörtlich etwa „Untätige Ansicht“) ist ein Entwurfsmuster, das aus der ursprünglichen Variante von MVP hervorgegangen ist und von Martin Fowler definiert wurde. Im Gegensatz zum {{lang|en|&amp;#039;&amp;#039;Supervising Controller&amp;#039;&amp;#039;}} existiert keine Verbindung über ein Datenobjekt zwischen &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039;. Dies trägt dazu bei, dass der &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; jegliche Datensynchronisation zwischen &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; selbst durchführen muss. Das Ergebnis dabei ist, dass die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; nur einfachste Logik zur Anzeige beinhaltet und keine Logik zur Synchronisation von Daten. Dadurch wird der Quelltext der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; äußerst vereinfacht, anders als dies beim {{lang|en|&amp;#039;&amp;#039;Supervising Controller&amp;#039;&amp;#039;}} der Fall ist.&lt;br /&gt;
&lt;br /&gt;
=== Unterschiede ===&lt;br /&gt;
In der {{lang|en|&amp;#039;&amp;#039;Passive View&amp;#039;&amp;#039;}} verbessert sich die Testbarkeit gegenüber dem {{lang|en|&amp;#039;&amp;#039;Supervising Controller&amp;#039;&amp;#039;}}, da nur noch einfachster Quellcode zur Ein- und Ausgabe in der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; vorhanden ist. Wird die &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; bei Tests durch ein [[Mock-Objekt]] ersetzt, wird so auch der Quelltext zur Synchronisation im &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; geprüft. Es verbleibt in diesem Fall keine nennenswerte Logik mehr in der &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039;. Dies verbessert also die Testbarkeit des &amp;#039;&amp;#039;Präsentierer&amp;#039;&amp;#039; und des &amp;#039;&amp;#039;Modells&amp;#039;&amp;#039; entscheidend.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz dazu bietet der {{lang|en|&amp;#039;&amp;#039;Supervising Controller&amp;#039;&amp;#039;}} den Vorteil einer vereinfachten Handhabung. Durch die Datensynchronisation über Datenbindungen zwischen &amp;#039;&amp;#039;Modell&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Ansicht&amp;#039;&amp;#039; wird der Synchronisationsaufwand wesentlich verringert, welches insgesamt weniger Quelltext erforderlich macht, als es bei der {{lang|en|&amp;#039;&amp;#039;Passive View&amp;#039;&amp;#039;}} der Fall ist.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.wildcrest.com/Potel/Portfolio/mvp.pdf Model-View-Presenter Definition von Taligent] (englisch, PDF, 154&amp;amp;nbsp;KiB)&lt;br /&gt;
* [http://www.martinfowler.com/eaaDev/uiArchs.html#Model-view-presentermvp Herkunft und Funktionsweise von Model-View-Presenter] (englisch)&lt;br /&gt;
* [http://www.martinfowler.com/eaaDev/SupervisingPresenter.html Supervising Controller] (englisch)&lt;br /&gt;
* [http://www.martinfowler.com/eaaDev/PassiveScreen.html Passive View] (englisch)&lt;br /&gt;
* {{Internetquelle |autor=Garry Pilkington |url=http://blog.asteropesystems.com/using-mvp-with-asp-net-web-forms/ |titel=Using MVP with ASP.NET Web Forms |werk=Don&amp;#039;t Believe The Type |datum=2013-06-04 |zugriff=2013-08-14 |sprache=en |kommentar=Implementierung von MVP mit [[ASP.NET#ASP.NET Web Forms|ASP.NET WebForms]]}}&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;
[[Kategorie:Entwurfsmuster]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Acky69</name></author>
	</entry>
</feed>