Ich habe drei Tage lang über die Muster Model-View-Controller (MVC) und Model-View-Presenter (MVP) gelesen . Und es gibt eine Frage, die mich sehr stört. Warum haben Software-Designer MVP erfunden, als es bereits eine MVC gab?
Welche Probleme hatten sie, die MVC nicht (oder schlecht) gelöst hat, die MVP aber lösen kann? Welche Probleme soll MVP lösen?
Ich habe viele Artikel über die Geschichte und Erklärung von MVP oder über Unterschiede zwischen MVC und MVP gelesen, aber keine hatte eine klare Antwort auf meine Fragen.
In einem der Artikel, die ich las, hieß es:
Nun zu Model View Presenter, einer Antwort auf die Unzulänglichkeiten des MVC-Musters bei der Anwendung auf moderne komponentenbasierte grafische Benutzeroberflächen. In modernen GUI-Systemen handhaben GUI-Komponenten selbst Benutzereingaben wie Mausbewegungen und Klicks und nicht irgendeine zentrale Steuerung.
Ich kann es nicht verstehen, aber kann es auch anders sein, dass GUI-Komponenten Benutzereingaben nicht selbst handhaben? Und was genau bedeutet "von selbst handhaben"?
quelle
Antworten:
MVC ist konzeptionell elegant:
Allerdings: Der Daten- und Ereignisfluss in MVC ist zirkulär. Die Ansicht enthält häufig wichtige Logik (z. B. Ereignishandler für Benutzeraktionen). Zusammengenommen machen diese Eigenschaften das System schwierig zu testen und zu warten.
Die MVP-Architektur ersetzt den Controller durch einen Presenter, der zwischen der Ansicht und dem Modell vermittelt. Dies linearisiert das System:
Dies hat folgende Vorteile:
Logik (wie Ereignishandler und Benutzeroberflächenstatus) kann aus der Ansicht in den Präsentator verschoben werden.
Die Benutzerschnittstelle kann in Bezug auf den Präsentator einem Unit-Test unterzogen werden, da sie den Status der Benutzerschnittstelle beschreibt. Während des Unit-Tests ersetzen wir die Ansicht durch einen Testtreiber, der den Moderator anruft.
Da die Benutzeroberfläche von der Anwendungslogik isoliert ist, können beide unabhängig voneinander entwickelt werden.
Dieser Ansatz hat jedoch auch einige Nachteile:
quelle
In MVP ersetzt der Presenter den MVC-Controller. Der Unterschied zwischen den beiden besteht darin, dass der Präsentator die Ansicht direkt bearbeitet. Es wurde für UI-Frameworks entwickelt, die in erster Linie ereignisgesteuert sind (wie Windows Forms), ohne dass umfangreiche Datenbindungen unterstützt werden, die das MVVM-Muster unterstützen (wie WPF). Andernfalls würde ein Großteil der Logik zum Verwalten des Ansichtsstatus und zum Aktualisieren des Hintergrundmodells in der Ansicht selbst liegen.
quelle