Vergleich der GUI-Architekturmuster MVC, MVP und MVVM
Vergleich der GUI-Architekturmuster: MVC, MVP und MVVM
Die Muster Model-View-Controller (MVC), Model-View-Presenter (MVP) und Model-View-ViewModel (MVVM) gehören zur Familie der architektonischen Entwurfsmuster für Benutzeroberflächen. Alle drei zielen darauf ab, **Logik, Daten und Darstellung** klar voneinander zu trennen, um **Wartbarkeit**, **Testbarkeit** und **Wiederverwendbarkeit** zu verbessern.
Grundprinzip
Alle drei Muster basieren auf der Idee, eine Anwendung in drei Komponenten zu unterteilen:
| Komponente | Aufgabe |
|---|---|
| Model | Enthält die Geschäftslogik und Daten der Anwendung.
Unabhängig von der Benutzeroberfläche. |
| View | Präsentiert Daten an den Benutzer und nimmt Eingaben entgegen. |
| Vermittler | Vermittelt zwischen View und Model:
Beim MVC ist dies der *Controller*, beim MVP der *Presenter*, beim MVVM das *ViewModel*. |
Übersicht der Hauptunterschiede
| Merkmal | MVC (Model-View-Controller) | MVP (Model-View-Presenter) | MVVM (Model-View-ViewModel) |
|---|---|---|---|
| Kommunikation | View ↔ Controller ↔ Model | View ↔ Presenter ↔ Model | View ⇄ ViewModel ⇄ Model |
| Richtung der Datenflüsse | Teils bidirektional | Presenter steuert View aktiv | Automatisch über Data Binding |
| Verbindung zwischen View und Model | Möglich | Strikt über Presenter | Nur indirekt über Bindings |
| Rolle der UI-Komponente | Reagiert auf Controller-Ereignisse | Delegiert alle Aktionen an Presenter | Ist an ViewModel-Eigenschaften gebunden |
| Testbarkeit | Gut | Sehr gut (Presenter isolierbar) | Sehr gut (ViewModel testbar) |
| Komplexität | Mittel | Mittel bis hoch | Hoch (abhängig von Bindings) |
| Framework-Unterstützung | Universell | GUI-Frameworks | Frameworks mit Datenbindung (WPF, MAUI, Angular, etc.) |
| Beispielhafte Frameworks | Django, ASP.NET MVC, Spring MVC | Android (Moxy, Mosby), Qt | WPF, MAUI, Xamarin, Vue.js, Angular |
| Abhängigkeiten | Controller kennt Model & View | Presenter kennt View (Interface) & Model | ViewModel kennt Model, aber nicht View |
Visualisierung
MVC: +--------------+ +--------------+ +--------------+ | View | <----> | Controller | <----> | Model | +--------------+ +--------------+ +--------------+ MVP: +--------------+ +--------------+ +--------------+ | View | <----> | Presenter | <----> | Model | +--------------+ +--------------+ +--------------+ MVVM: +--------------+ <-----> +--------------+ <-----> +--------------+ | View | Binding | ViewModel | | Model | +--------------+ +--------------+ +--------------+
Ablauf im Vergleich
| Schritt | MVC | MVP | MVVM |
|---|---|---|---|
| Benutzeraktion | Wird vom Controller verarbeitet | Wird an Presenter weitergeleitet | Löst automatisch Änderungen im ViewModel aus |
| Logikverarbeitung | Controller ändert Model | Presenter aktualisiert Model | ViewModel aktualisiert Model |
| UI-Aktualisierung | Controller oder Model ruft View auf | Presenter aktualisiert View | View aktualisiert sich automatisch durch Binding |
Vor- und Nachteile im Überblick
| Muster | Vorteile | Nachteile |
|---|---|---|
| MVC |
| |
| MVP |
| |
| MVVM |
|
Typische Einsatzgebiete
| Bereich | Empfohlenes Muster | Beispiel |
|---|---|---|
| Klassische Webanwendungen | MVC | Django, Laravel, Spring MVC |
| GUI-Anwendungen (Desktop) | MVP oder MVVM | Qt, WPF, MAUI |
| Mobile Apps | MVP oder MVVM | Android, Xamarin |
| Single-Page-Applications (SPA) | MVVM | Angular, Vue.js, React |
Entwicklungsgeschichte
- **1979:** Einführung von MVC durch Trygve Reenskaug in Smalltalk.
- **1990er:** Etablierung in Webframeworks wie ASP.NET MVC und Spring.
- **2000er:** Entstehung von MVP zur besseren Testbarkeit in GUIs.
- **2005:** Entwicklung von MVVM durch John Gossman (Microsoft) für WPF.
Fazit
Alle drei Muster dienen demselben Ziel: → **Trennung von Darstellung, Logik und Daten.**
Die Wahl hängt vom Anwendungstyp und verwendeten Framework ab:
- **MVC:** Ideal für Webserver-Frameworks
- **MVP:** Ideal für testbare GUI-Anwendungen ohne Binding-System
- **MVVM:** Ideal für moderne, datenbindungsfähige Frameworks
Siehe auch
- Model-View-Controller (MVC) Entwurfsmuster
- Model-View-Presenter (MVP) Entwurfsmuster
- Model-View-ViewModel (MVVM) Entwurfsmuster
- Presentation-Abstraction-Control (PAC) Muster
- Event-Driven Architecture
- Entwurfsmuster (Softwareentwicklung)
Quellen
- Trygve Reenskaug: *MVC Introduction* (1979)
- John Gossman: *Introduction to MVVM* (Microsoft, 2005)
- Martin Fowler: *GUI Architectures* (2006)
- Martin Fowler – UI Architectures
- Refactoring.Guru: Design Patterns
- Wikipedia: Model–View–Controller