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.