<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Model-View-Controller_%28MVC%29</id>
	<title>Model-View-Controller (MVC) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Model-View-Controller_%28MVC%29"/>
	<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Model-View-Controller_(MVC)&amp;action=history"/>
	<updated>2026-05-09T11:17:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in dev.kaibel.net</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://dev.kaibel.net/index.php?title=Model-View-Controller_(MVC)&amp;diff=86&amp;oldid=prev</id>
		<title>PhilKa: Die Seite wurde neu angelegt: „= Model-View-Controller (MVC) Entwurfsmuster =  Das &#039;&#039;&#039;Model-View-Controller&#039;&#039;&#039;-Muster (kurz: &#039;&#039;&#039;MVC&#039;&#039;&#039;) ist ein grundlegendes &#039;&#039;&#039;Architekturmuster&#039;&#039;&#039; der Softwareentwicklung, das zur **Trennung von Daten, Darstellung und Logik** dient.   Es sorgt für eine klare Struktur, bessere Wartbarkeit und Wiederverwendbarkeit von Code, insbesondere in GUI- und Webanwendungen.  == Grundidee ==  Das MVC-Muster teilt eine Anwendung in drei klar getrennte Komponenten:…“</title>
		<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Model-View-Controller_(MVC)&amp;diff=86&amp;oldid=prev"/>
		<updated>2025-11-01T11:41:28Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Model-View-Controller (MVC) Entwurfsmuster =  Das &amp;#039;&amp;#039;&amp;#039;Model-View-Controller&amp;#039;&amp;#039;&amp;#039;-Muster (kurz: &amp;#039;&amp;#039;&amp;#039;MVC&amp;#039;&amp;#039;&amp;#039;) ist ein grundlegendes &amp;#039;&amp;#039;&amp;#039;Architekturmuster&amp;#039;&amp;#039;&amp;#039; der Softwareentwicklung, das zur **Trennung von Daten, Darstellung und Logik** dient.   Es sorgt für eine klare Struktur, bessere Wartbarkeit und Wiederverwendbarkeit von Code, insbesondere in GUI- und Webanwendungen.  == Grundidee ==  Das MVC-Muster teilt eine Anwendung in drei klar getrennte Komponenten:…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Model-View-Controller (MVC) Entwurfsmuster =&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Model-View-Controller&amp;#039;&amp;#039;&amp;#039;-Muster (kurz: &amp;#039;&amp;#039;&amp;#039;MVC&amp;#039;&amp;#039;&amp;#039;) ist ein grundlegendes &amp;#039;&amp;#039;&amp;#039;Architekturmuster&amp;#039;&amp;#039;&amp;#039; der Softwareentwicklung, das zur **Trennung von Daten, Darstellung und Logik** dient.  &lt;br /&gt;
Es sorgt für eine klare Struktur, bessere Wartbarkeit und Wiederverwendbarkeit von Code, insbesondere in GUI- und Webanwendungen.&lt;br /&gt;
&lt;br /&gt;
== Grundidee ==&lt;br /&gt;
&lt;br /&gt;
Das MVC-Muster teilt eine Anwendung in drei klar getrennte Komponenten:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Komponente !! Aufgabe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Model&amp;#039;&amp;#039;&amp;#039; || Enthält die Anwendungslogik, Datenstrukturen und Regeln.  &lt;br /&gt;
Verwaltet den Zustand der Anwendung unabhängig von der Benutzeroberfläche.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;View&amp;#039;&amp;#039;&amp;#039; || Präsentiert die Daten des Models dem Benutzer (z. B. GUI, Webseite, Konsole).  &lt;br /&gt;
Reagiert auf Änderungen im Model.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Controller&amp;#039;&amp;#039;&amp;#039; || Nimmt Benutzereingaben entgegen, interpretiert sie und ändert Model oder View entsprechend.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+--------------+        +--------------+        +--------------+&lt;br /&gt;
|    View      | &amp;lt;----&amp;gt; |  Controller  | &amp;lt;----&amp;gt; |    Model     |&lt;br /&gt;
| (Anzeige)    |        | (Steuerung)  |        | (Daten)      |&lt;br /&gt;
+--------------+        +--------------+        +--------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ablauf ==&lt;br /&gt;
1. **Benutzeraktion:** Der Benutzer interagiert mit der View (z. B. klickt einen Button).  &lt;br /&gt;
2. **Steuerung:** Der Controller empfängt das Ereignis und ändert den Zustand des Models.  &lt;br /&gt;
3. **Datenänderung:** Das Model aktualisiert seine Daten und informiert die View.  &lt;br /&gt;
4. **Anzeige:** Die View aktualisiert die Darstellung gemäß den neuen Modeldaten.&lt;br /&gt;
&lt;br /&gt;
== Beispiel (C++ mit Pseudocode) ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// MODEL&lt;br /&gt;
class Model {&lt;br /&gt;
    std::string text = &amp;quot;Hello&amp;quot;;&lt;br /&gt;
public:&lt;br /&gt;
    std::string getText() const { return text; }&lt;br /&gt;
    void setText(const std::string&amp;amp; t) { text = t; }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// VIEW&lt;br /&gt;
class View {&lt;br /&gt;
public:&lt;br /&gt;
    void display(const std::string&amp;amp; data) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;Anzeige: &amp;quot; &amp;lt;&amp;lt; data &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// CONTROLLER&lt;br /&gt;
class Controller {&lt;br /&gt;
    Model&amp;amp; model;&lt;br /&gt;
    View&amp;amp; view;&lt;br /&gt;
public:&lt;br /&gt;
    Controller(Model&amp;amp; m, View&amp;amp; v) : model(m), view(v) {}&lt;br /&gt;
    void onUserInput(const std::string&amp;amp; input) {&lt;br /&gt;
        model.setText(input);&lt;br /&gt;
        view.display(model.getText());&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    Model model;&lt;br /&gt;
    View view;&lt;br /&gt;
    Controller controller(model, view);&lt;br /&gt;
&lt;br /&gt;
    controller.onUserInput(&amp;quot;Hallo MVC!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
**Ergebnis:**&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Anzeige: Hallo MVC!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorteile ==&lt;br /&gt;
* **Klare Trennung von Logik, Daten und Darstellung**  &lt;br /&gt;
* **Einfachere Wartung und Testbarkeit**  &lt;br /&gt;
* **Mehrfachverwendung des Models mit unterschiedlichen Views**  &lt;br /&gt;
* **Unabhängige Entwicklung von Frontend und Backend**&lt;br /&gt;
&lt;br /&gt;
== Nachteile ==&lt;br /&gt;
* Zusätzlicher Strukturierungsaufwand  &lt;br /&gt;
* Höhere Komplexität bei kleinen Projekten  &lt;br /&gt;
* Kommunikation zwischen Komponenten kann aufwendig werden&lt;br /&gt;
&lt;br /&gt;
== Varianten ==&lt;br /&gt;
Das MVC-Muster wurde in vielen Frameworks weiterentwickelt oder angepasst:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variante !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| [[MVP (Model-View-Presenter)]] || Der Presenter übernimmt mehr Logik und kommuniziert direkter mit der View.&lt;br /&gt;
|-&lt;br /&gt;
| [[MVVM (Model-View-ViewModel)]] || Typisch für GUI-Frameworks (z. B. WPF, MAUI). Datenbindung zwischen View und ViewModel.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;HMVC&amp;#039;&amp;#039;&amp;#039; || Hierarchisches MVC für modulare Anwendungen mit verschachtelten Controllern.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MVC in Webanwendungen ==&lt;br /&gt;
In modernen Webframeworks wird MVC weit verbreitet eingesetzt:&lt;br /&gt;
&lt;br /&gt;
* **Model:** Daten und Geschäftslogik (z. B. Datenbankmodelle)&lt;br /&gt;
* **View:** HTML-/Template-Dateien&lt;br /&gt;
* **Controller:** Vermittelt zwischen HTTP-Anfragen und Modellen&lt;br /&gt;
&lt;br /&gt;
Beispiel in Frameworks:&lt;br /&gt;
* **Laravel (PHP)**&lt;br /&gt;
* **Django (Python)**&lt;br /&gt;
* **ASP.NET MVC (C#)**&lt;br /&gt;
* **Spring MVC (Java)**&lt;br /&gt;
* **Ruby on Rails**&lt;br /&gt;
&lt;br /&gt;
== Beispiel einer Webstruktur ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/app&lt;br /&gt;
 ├── models/&lt;br /&gt;
 │   └── user.php&lt;br /&gt;
 ├── views/&lt;br /&gt;
 │   └── userView.html&lt;br /&gt;
 └── controllers/&lt;br /&gt;
     └── userController.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vergleich mit ähnlichen Mustern ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Muster !! Fokus !! Besonderheit&lt;br /&gt;
|-&lt;br /&gt;
| [[MVP (Model-View-Presenter)]] || GUI-Architektur || Presenter kontrolliert die View direkt&lt;br /&gt;
|-&lt;br /&gt;
| [[MVVM (Model-View-ViewModel)]] || Datenbindung || ViewModel abstrahiert View komplett&lt;br /&gt;
|-&lt;br /&gt;
| [[PAC (Presentation-Abstraction-Control)]] || Interaktive Systeme || Hierarchisch strukturierte Variante von MVC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Einsatzgebiete ==&lt;br /&gt;
* Benutzeroberflächen (Desktop, Web, Mobile)&lt;br /&gt;
* GUI-Frameworks (Qt, JavaFX, WPF)&lt;br /&gt;
* Webframeworks (Laravel, Django, Spring, Rails)&lt;br /&gt;
* Software mit klarer Trennung von Logik und Darstellung&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[MVP (Model-View-Presenter)]]&lt;br /&gt;
* [[MVVM (Model-View-ViewModel)]]&lt;br /&gt;
* [[PAC (Presentation-Abstraction-Control)]]&lt;br /&gt;
* [[Entwurfsmuster (Softwareentwicklung)]]&lt;br /&gt;
* [[Event-Driven Architecture]]&lt;br /&gt;
* [[Observer-Entwurfsmuster]]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
* Erich Gamma et al.: *Design Patterns – Elements of Reusable Object-Oriented Software*  &lt;br /&gt;
* Trygve Reenskaug: *MVC Introduction (1979)*  &lt;br /&gt;
* [https://en.wikipedia.org/wiki/Model–view–controller Wikipedia: Model–View–Controller]  &lt;br /&gt;
* [https://refactoring.guru/design-patterns/mvc Refactoring.Guru: MVC Pattern]&lt;/div&gt;</summary>
		<author><name>PhilKa</name></author>
	</entry>
</feed>