Der Benutzer interagiert mit der Ansicht , aber die Ansicht muss dem Controller die Aktionen mitteilen . Der Controller kann das Modell aktualisieren , dies ist jedoch nicht bei jeder Änderung erforderlich.
Die Beschreibung basiert auf meinen persönlichen Erfahrungen mit der .NET-Implementierung von MVC. Ihre Implementierung kann unterschiedlich sein.
Im Controller werden Aktionen verarbeitet, im Grunde genommen eine Business-Schicht. Ein einfacher Controller wird nichts weiter tun, als die Daten aus dem Modell in die Ansicht einzuspeisen. Ein komplizierter Controller führt alle Arten von Aktionen aus, bis hin zu Sicherheitsverwaltung, Authentifizierung, Autorisierung, Registrierung und möglicherweise vielen anderen Dingen.
Die Ansicht sollte nur für die Anzeige der Informationen auf eine Weise verantwortlich sein, die der Benutzer verstehen kann. Hier kann es zu einigen Überschneidungen sowohl mit dem Controller als auch mit dem Modell kommen, da beispielsweise Single Page Applications (SPAs) ein Feedback zur Datenvalidierung für den Benutzer haben. Alle anderen Überkreuzungen sind stark verpönt.
Das Modell befasst sich mit Daten. Dies beinhaltet die Validierung von Daten (falls zutreffend). Das Speichern und Abrufen von Daten wird ebenfalls in dieser Schicht behandelt.
AKTUALISIEREN
Es scheint einige Verwirrung darüber zu geben, wer was wann tut. Ich habe zwei verschiedene Übersichten der MVC-Architekturen eingefügt, da sie ähnlich, aber nicht gleich sind. Es gibt Raum für beide Interpretationen. Möglicherweise viele mehr. Die obigen Beschreibungen sind meine Interpretation von MVC aus mehreren Quellen, einschließlich meiner eigenen Erfahrung beim Erstellen von Anwendungen unter Verwendung dieser Methodik. Hoffentlich hilft dieses Update dabei, diese Verwirrung zu beseitigen.
MVC ist ein Versuch, ein Entwurfsmuster für die Trennung von Interessen für die Softwareentwicklung zu erstellen . Es wurde hauptsächlich in webbasierten Anwendungen implementiert (meines Wissens).
Die Ansicht übernimmt die gesamte Benutzerinteraktion. Wenn Ihr Benutzer auf eine Schaltfläche klickt, bestimmt die Ansicht, ob es sich bei dem Klick um eine Benutzeroberflächeninteraktion handelt oder um eine Interaktion, die nicht von ihm betroffen ist (eine Controllerinteraktion). Wenn die Schaltfläche Werte von einem Feld in ein anderes kopiert, bestimmt Ihre Implementierung, ob dies ein View-Anliegen oder ein Controller-Anliegen ist. Diese Unschärfe der Bedenken tritt höchstwahrscheinlich nur bei einer Single Page Application (SPA) auf.
Im Controller werden Ihre Aktionen verarbeitet. Die Ansicht hat mitgeteilt, dass der Benutzer beschlossen hat, die Werte für einige Felder zu ändern. Der Controller kann die Validierung dieser Daten durchführen oder sie kann vom Modell verarbeitet werden. Dies ist wiederum implementierungsabhängig. Wenn der Controller über Sicherheitsfunktionen verfügt, wird möglicherweise festgestellt, dass der Benutzer nicht über die erforderlichen Berechtigungen zum Ausführen der Aktion verfügt. Es würde die Änderungen verwerfen und die Ansicht entsprechend aktualisieren. Der Controller bestimmt auch, welche Daten aus dem Modell abgerufen werden sollen, wie diese gepackt werden sollen und aktualisiert die Ansicht mit diesen Daten.
Das Modell bestimmt, wie und wo Daten gespeichert werden. Es kann auch eine Validierung dieser Daten vor dem Speichern durchführen (dies sollte erfolgen, da die Ansicht gelegentlich umgangen wird).
Wikipedia hat einen Artikel über MVC .
- Ein Modell benachrichtigt seine zugeordneten Ansichten und Controller, wenn sich sein Status geändert hat. Mit dieser Benachrichtigung können Ansichten ihre Präsentation aktualisieren und die Controller die verfügbaren Befehlssätze ändern. In einigen Fällen kann eine MVC-Implementierung stattdessen "passiv" sein, sodass andere Komponenten das Modell nach Updates abfragen müssen, anstatt benachrichtigt zu werden.
- Eine Ansicht erhält vom Controller alle Informationen, die er zum Generieren einer Ausgabedarstellung für den Benutzer benötigt. Es kann auch generische Mechanismen bereitstellen, um den Controller über Benutzereingaben zu informieren.
- Ein Controller kann Befehle an das Modell senden, um den Status des Modells zu aktualisieren (z. B. Bearbeiten eines Dokuments). Es kann auch Befehle an die zugehörige Ansicht senden, um die Darstellung des Modells in der Ansicht zu ändern (z. B. durch Scrollen durch ein Dokument).
Aus der Microsoft-Übersicht über MVC .
Modelle. Modellobjekte sind die Teile der Anwendung, die die Logik für die Datendomäne der Anwendung implementieren. Häufig rufen Modellobjekte den Modellstatus ab und speichern ihn in einer Datenbank. Beispielsweise kann ein Product-Objekt Informationen aus einer Datenbank abrufen, bearbeiten und dann aktualisierte Informationen in eine Products-Tabelle in einer SQL Server-Datenbank zurückschreiben.
In kleinen Anwendungen ist das Modell oft eine konzeptionelle Trennung anstelle einer physischen. Wenn die Anwendung beispielsweise nur ein Dataset liest und es an die Ansicht sendet, verfügt die Anwendung nicht über eine physische Modellschicht und zugeordnete Klassen. In diesem Fall übernimmt der Datensatz die Rolle eines Modellobjekts.
Ansichten. Ansichten sind die Komponenten, die die Benutzeroberfläche der Anwendung anzeigen. In der Regel wird diese Benutzeroberfläche aus den Modelldaten erstellt. Ein Beispiel wäre eine Bearbeitungsansicht einer Products-Tabelle, in der Textfelder, Dropdown-Listen und Kontrollkästchen basierend auf dem aktuellen Status eines Product-Objekts angezeigt werden.
Controller. Controller sind die Komponenten, die die Benutzerinteraktion verwalten, mit dem Modell arbeiten und letztendlich eine Ansicht zum Rendern auswählen, die die Benutzeroberfläche anzeigt. In einer MVC-Anwendung werden in der Ansicht nur Informationen angezeigt. Der Controller verarbeitet und reagiert auf Benutzereingaben und Interaktionen. Beispielsweise verarbeitet der Controller Abfragezeichenfolgenwerte und übergibt diese Werte an das Modell, das diese Werte möglicherweise zum Abfragen der Datenbank verwendet.