Model-View-Controller
MVC ist ein Design-Pattern (zu deutsch: Entwurfsmuster), das sehr gut bei [OER-Informatik] (https://oer-informatik.de/gui_pattern_mvc) beschrieben wird.
Martin Fowler:
Make a strong separation between presentation (view & controller) and domain (model).
Graphische Darstellung
Realisiert mit Mermaid in MarkDown:
classDiagram
class Model {
+getData() String
+setData(data: String) void
}
class View {
+displayData(data: String) void
+getUserInput() String
+update() void
}
class Controller {
+handleInput(input: String) void
+notifyModel(data: String) void
+notifyView() void
}
View --> Controller : sendet Benutzereingabe
Model --> Controller : liefert Daten
Controller --> Model : aktualisiert Daten
Controller --> View : erneuert Ansicht
Das Model
Das Model regelt und kapselt den Zugriff und die Verarbeitung der Daten der Problemdomäne und hält den Zustand, der diese Daten repräsentiert. Nur der Teil der Geschäftslogik, der direkt mit der Speicherung, Änderung, Löschung oder Erzeugung von Daten zusammenhängt, liegt im Verantwortungsbereich des Models, ebenso wie Operationen, die unmittelbar auf dem Model ausgeführt werden müssen (z.B. die Berechnung von abgeleiteten Attributen wie z.B. Durchschnitten oder anderen derivied values).
Die View
Die View ist verantwortlich für die Präsentation der Daten eines Models. Es ist möglich, dass unterschiedliche Views die selben Daten unterschiedlich darstellen. Das selbe Model kann unter Umständen als Liste, Tabelle, Formular oder Diagramm dargestellt werden oder für unterschiedliche Endgeräte (als Website, DesktopApp oder für andere Geräte).
Der Controller
Er nimmt die Anfragen des Benutzers entgegen (teilweise mittelbar über die View), gibt Datenänderungen an das Model weiter. Er ruft also unmittelbar die Getter- und Setter-Methoden des Models auf. Er wählt die korrekte View aus, stellt die nötigen Daten zusammen und sendet alles an den anfragenden Client oder aktualisiert die jeweilige Komponente der View.
Vorteil
Die View kann ausgetauscht werden (statt Swing, nun HTML oder Qt) ohne dass Controller oder Model verändert werden müssen. Die Datenhaltung kann getauscht werden (JSON oder sqlite statt Datenbank) und View und Controller sind konstant.