Meine Frage bezieht sich auf die ideale oder originale MVC-Interpretation Ссылка
Wie MVC Ziel ist, Abhängigkeiten zu reduzieren, sollte die Ansicht das Modell kennen? Was würde dann verhindern, dass es fett wird und direkt Model-Methoden aufrufen, ohne Controller zu fragen?
Update: Wenn ich die Antwort unten lese, nehme ich ein konkretes Beispiel:
Nehmen wir an, Sie erstellen einen komplexen Rechner (nicht nur einen einfachen, sagen wir einen Optionspreis für den Aktienmarkt). Es braucht nur Input wie Aktienkurs, Zinssatz, Volatilität. Also warum sollte ich einen Verweis auf das gesamte Modell erstellen, das die Methoden aus der Sicht enthält, da ich NUR diese Eingangsvariablen brauche?
Warum wird der Controller nicht nur benachrichtigt, wenn sich etwas in der Ansicht ändert, und dann eine Methode in der Ansicht nur mit der Eingabe aufrufen?
Zum Beispiel sehe ich, dass die View einen Verweis auf das ganze Modell hat:
%Vor%Was würde es dann verhindern? Fett und rufen Sie direkt Modell Methoden ohne Controller zu fragen, ohne Controller zu fragen?
Ich fand das ein bisschen humorvoll. Ansichten haben keine eigenen Köpfe, aber Programmierer tun es. Sie sind diejenigen, die falsche Entscheidungen treffen und View erlauben, das zu tun, was sie tut.
View muss genug über Model wissen, damit es angezeigt werden kann. Wenn Ihre Programmierer sich selbst nicht kontrollieren können, könnte es eine Antwort sein, ihre Model-Objekte unveränderlich zu machen.
Eine andere Möglichkeit könnte AOP sein. Schreiben Sie einen Aspekt, der Aufrufe der Serviceebene verhindert, die nicht von anderen Diensten oder Controllern stammen.
Es gibt noch eine andere Sichtweise: Bei AJAX dreht sich alles um Views, die Dinge selbst in die Hand nehmen und Dienste ohne Erlaubnis von irgendjemandem aufrufen, um Dinge asynchron zu machen und die Reaktionsfähigkeit für eine bessere Benutzererfahrung zu verbessern. Das ist ein gutes Ding.
Sei nicht zu sehr an architektonischer Reinheit hängen. MVC ist ein feines Muster und sehr nützlich, wo es gilt. Kenne die Regeln; wissen, wann es angemessen ist, die Regeln zu brechen. Sei nicht so dogmatisch - in der Programmierung oder im Leben.
Ja, in MVC kennt die Ansicht das Modell. In der Tat ist der Job der Ansicht das Modell so anzuzeigen, dass es über das Modell Bescheid wissen muss. Die Modelle sollten ziemlich einfach sein und sollten eigentlich keine Container des Zustands sein (d. H. Eigenschaften, die Strings, Ints usw. sind) - sie sollten keine Methoden haben.
Der Controller kennt sowohl die Ansicht als auch das Modell. Die Aufgabe des Controllers besteht darin, das entsprechende Modell zu erhalten und es an die entsprechende Ansicht zu übergeben.
Das Modell sollte sich weder des Controllers noch der Ansicht bewusst sein.
Dies ist die typische Trennung von Bedenken in MVC (SoC), wo jede Komponente ihren wohldefinierten "Job" hat.
Das Ziel der Ansicht besteht darin, die vom Modell abgeleiteten Daten zu rendern. Also die Antwort ist, dass es nicht sollte. Auf der anderen Seite sollte das Modell nicht darauf achten, wie diese Daten dargestellt werden.
Zum Beispiel könnte die Geschäftslogik gewesen sein:
%Vor%Während die Präsentationslogik:
%Vor%Tags und Links language-agnostic model-view-controller design-patterns