Ich habe kürzlich etwas über das MVC-Entwurfsmuster gelernt. Ich lerne aus dem Head First Design Pattern-Buch.
Nach diesem Buch (wenn ich es richtig verstehe):
Das Modell besteht hauptsächlich aus der Anwendungslogik und den Anwendungsdaten.
Die Ansicht ist im Grunde die GUI, die das Modell für den Benutzer visuell darstellt.
Der Controller ist dafür verantwortlich, zu vermitteln und als Vermittler zwischen der Ansicht und dem Modell zu agieren. Die Ansicht meldet dem Controller, dass der Benutzer eine Aktion ausgeführt hat, und der Controller übersetzt diese in Methodenaufrufe für das Modell.
Viele Stellen im Internet widersprechen jedoch dem, was ich aus diesem Buch verstehe. Sie behaupten, dass der Benutzer im Allgemeinen mit dem Controller interagiert, nicht mit der Ansicht.
Welches ist wahr oder häufiger? Interagiert der Benutzer direkt mit dem Controller oder direkt mit der Ansicht? Sind beide Ansätze akzeptabel? Welches ist häufiger?
quelle
Antworten:
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 .
Aus der Microsoft-Übersicht über MVC .
quelle
url-routes
, in die gelegtController
. Ich meine, überhaupt keine Aussicht ...Der Benutzer interagiert mit dem Controller . Vom technischen Point-of-View Sie sind nicht mit der zusammenwirkenden Ansicht , sie ist nur mit es mit den zu interagieren - Controller .
An der Oberfläche scheint es, dass der Benutzer mit der GUI interagiert - auch für einen Nicht-Programmierer ist dies sinnvoller, aber wenn Sie auf eine Schaltfläche klicken, sprechen Sie im Grunde genommen mit dem Controller und nicht mit der Ansicht .
Auch haben nicht alle Anwendungen - selbst MVC-Webanwendungen - eine GUI. Sie können mit dem Controller über eine API interagieren -
url-routes
zum Beispiel einfach im Controller selbst.Die Steuerung sollte der Ort sein, erhält und Griffe , die Benutzeranforderungen. Wenn Sie also irgendwie direkt von View aus auf das Modell zugreifen - egal wie, dann ist es nicht mehr MVC .
quelle
Lassen Sie uns ein konkretes Beispiel dafür verwenden, warum Benutzer direkt mit Ansichten und nicht mit Controllern interagieren.
In der Musik-App auf dem iPhone ist die Wiedergabe einer Wiedergabeliste eine wichtige Funktion. "Playliste abspielen" ist eine Funktion eines Controllers zur App.
Es gibt mehrere Möglichkeiten, diese Funktion zu aktivieren. Ich kann auf die Wiedergabeliste in der App klicken oder Siri (Sprachschnittstelle) auffordern, dieselbe Funktion auszuführen. Das sind zwei verschiedene Gesten , die von den verschiedenen Ansichten erkannt werden.
Das Feedback in jeder Ansicht ist auch unterschiedlich. Siri wird Ihnen mitteilen, dass die von Ihnen angeforderte Musik abgespielt wird. Die Musik-App zeigt Ihnen visuell an, dass die Wiedergabeliste abgespielt wird.
quelle