Ich arbeite ziemlich oft mit ASP.NET MVC (und anderen webbasierten MVC-Implementierungen), aber das ist etwas, dessen ich mir nie sicher war: Sollten Controller und Ansicht kommunizieren?
Natürlich sollte der Controller auswählen, welche Ansicht verwendet werden soll, aber was ich meine, sollte der Controller Daten an die Ansicht übergeben? Wenn die Ansicht Daten vom Controller erwartet, sind sie meiner Meinung nach effektiv als Paar (Controller, Ansicht) miteinander verbunden. Stattdessen muss die Ansicht normalerweise mit dem Modell selbst kommunizieren und von jedem Controller unabhängig sein.
Habe ich den richtigen Ansatz oder gibt es keine richtige Antwort? Ändert sich die Antwort bei der Arbeit im Web im Vergleich zu anderen Umgebungen? Ändert sich die Antwort, wenn Sie das Konzept einer stark typisierten Ansicht haben (wie in ASP.NET MVC) oder nicht?
quelle
Antworten:
Die Steuerung bereitet Daten vor, die zum Rendern / Anzeigen weiter an die Ansicht übergeben werden. Es akzeptiert auch Benutzereingabedaten über einen Publish-Subscribe-Mechanismus oder ähnliches. Weitere Informationen zu MVC finden Sie im ersten Diagramm auf Wikipedia oder auf der Website von Martin Fowler .
Während eine Ansicht im Allgemeinen Daten akzeptiert, hängt sie in den meisten MVC-Frameworks nicht von bestimmten Controllern ab. Ausnahmen bilden beispielsweise die JavaServer Faces-Familie. Im Allgemeinen können Sie mit Frameworks wie Rails, Django oder Spring MVC Ansichten von Controllern entkoppeln, indem Sie Daten (den Kontext, üblicherweise eine Karte / ein Wörterbuch / eine Tasche) an eine Ansicht übergeben (wobei eine Ansicht eine Implementierung des Vorlagenansichtsmusters ist ).
Ob Ihre Programmiersprache stark typisiert ist oder nicht, hat keinen Einfluss darauf, wie Sie Ihre Anwendung organisieren.
quelle
Die Frage, die Sie stellen, wird von Zeit zu Zeit in meinem Team diskutiert. Wir streiten uns über zwei Ansätze, die beide ihre Vor- und Nachteile haben.
Der erste argumentiert, dass der Controller die Ansicht nach dem folgenden Muster aktualisieren kann. Es hört sowohl GUI- als auch Modellereignisse ab. Wenn ein GUI-Ereignis auftritt, führt es die erforderliche Aktion im Modell aus, die wiederum ausgelöst und ausgelöst wird. Jetzt aktualisiert der Controller normalerweise die Ansicht mit den erforderlichen Daten.
Der zweite Ansatz argumentiert, dass die Ansicht selbst die Modellereignisse abhört und sich selbst mit den Daten aktualisiert, die entweder an das Ereignis angehängt sind oder das Modell abfragen.
Beim ersten Ansatz haben Sie mehr Leistung für den Controller, der wirklich alles steuert, was in Ihrer Anwendung vor sich geht. Die Macht zu entscheiden, auf welche Weise die Ansicht aktualisiert werden soll, je nachdem, welches Ereignis in seinen Händen liegt, und auf diese Weise halten Sie Ihre Ansicht rein. Wie Sie bereits sagten, haben Sie auf diese Weise Ihre Ansicht und Ihren Controller miteinander verbunden.
In der zweiten entkoppeln Sie sie, aber Ihre Ansicht kontrolliert sich tatsächlich auf irgendeine Weise.
quelle