2009-08-16 13 views
3

Normalerweise wird im MVC-Muster, wenn ein Benutzer auf eine Seite klickt, die Anfrage gesendet, dann würde der Controller die Anfrage bearbeiten und sie dann unter Verwendung des Modells verarbeiten und an die entsprechende Ansicht weiterleiten.Gibt es eine Abhängigkeit zwischen Ansicht und einem Modell?

Ich habe den Beitrag über das passive Modell und das aktive Modell gelesen, aber gibt es eine Möglichkeit, wo die Ansicht direkt mit dem Modell interagiert, wäre das eine bidirektionale Beziehung (dh Modell < -> Ansicht) oder gerichtet (dh Modell-> Ansicht).

Ist es angemessen, eine Beziehung zwischen Model und View zu haben? Nun, sollte ich in einem ASP.NET MVC-Projekt eine Beziehung zwischen Modell und Ansicht haben oder unabhängig vom Modell haben?

Antwort

2

Ich denke, es ist fast immer vorzuziehen, dass Ihre Ansichten modellspezifisch, dh stark typisiert sind. Wenn Modelle verwandte Daten teilen, können Sie Teilansichten verwenden, die für diese Teilmenge von Daten spezifisch sind. In ASP.NET MVC ist Ihr Modell - oder sollte es sein - nicht über die Ansicht informiert, da sie nur über eine Webanforderung, bei der es sich um eine Controllerfunktion handelt, interagieren können. Nein, Sie könnten sagen, dass Sie über Webservices interagieren könnten, aber ich würde diese als eine andere Art von Controller betrachten. In der Tat sehe ich bei MVC sehr wenig Notwendigkeit, einen separaten Web-Service überhaupt zu entwickeln, stattdessen REST-basierte Controller-Aktionen zu verwenden.

+0

+1 Erfasst den wesentlichen Geschmack von ASP.NET MVC. –

+0

Aber gibt es irgendeine Interaktion zwischen der Ansicht und dem Modell, soweit ich sehen kann ist, dass der Controller die Anfrage behandelt, Prozesse mit dem Modell und abhängig von der Aktion eine Ansicht generiert wird, so ist der Zyklus C-> M-> C-> V (C-Controller, M-Modell, V-View), gibt es einen Fall, in dem es wie M-> V sein könnte – kurozakura

+0

Der Controller kann das Modell oder ein View-Modell an die Ansicht zurückgeben. Die Ansicht kann direkt darauf zugreifen, aber nur um Werte aus dem Modell zu lesen. Dies wäre ein Argument für View-Modelle, die nicht bestehen bleiben.Das Modell selbst enthält normalerweise keine ansichtsspezifischen Daten, obwohl ich in der Praxis manchmal Markup in meine Ansichtsmodule einfüge - etwa wie ein Rastermodell, in dem eine der Spalten eine Verknüpfung enthalten soll. – tvanfosson

0

In Java Swing MVC ist als View und Controller kombiniert implementiert, mit einer View, die sowohl vom Modell liest als auch Ereignisse registriert, die sie voneinander abhängig machen.

Normalerweise tun Web-Anwendungen dies nicht, da die reale Ansicht auf dem Client gerendert wird und Ereignisse vom Modell nicht so einfach empfangen werden können. In diesen Fällen verläuft die Beziehung also nur in eine Richtung. Es ist sicherlich keine schlechte Sache, eine Beziehung zwischen dem Modell und der Ansicht zu haben, solange das Modell nicht direkt von Klassen abhängig ist und diese betrachtet. In diesem Fall würde ein Abhängigkeitszyklus eingerichtet werden, der die Wartung und insbesondere das Testen beeinträchtigt.

Zum Beispiel wird dies in Swing über eine Listener-Schnittstelle erreicht, die die Ansicht dann implementieren/bereitstellen kann.

1

Ich sehe immer die Ansicht als die Möglichkeit, das Modell zu präsentieren. Aus dieser Sicht ist das View-Modell bekannt und in ASP.NET MVC sollten Sie Seiten von ViewPage erben, um den Missbrauch von ViewData oder Castings zu vermeiden.

In diesem Sinne ist das Modell nicht sicht bewusst und ist nur ein Objekt, das aus der Sicht verwendet wird, um Daten an den Benutzer zu präsentieren.

Schließlich können Sie das gleiche Modell aus verschiedenen Ansichten teilen, zum Beispiel eine XML-Ausgabe kann das gleiche Modell wie die HTML-Ausgabe teilen, aber die Ansichten können sehr unterschiedlich sein.

Der Zyklus ist mehr oder weniger, Controller generiert Modell, übergibt es an die Ansicht, zeigt das Modell und im Falle einer Interaktion, die Eingabe an den Controller und der Zyklus beginnt erneut.

Verwandte Themen