2010-04-08 39 views
5

Ich habe viele MVC-Beispiele gesehen, in denen Domain-Objekte direkt an Ansichten übergeben werden, dies funktioniert gut, wenn Ihre Ansicht einfach ist.asp.net MVC sollte ein View-Model Encapsulate Domain-Model?

Die gängige Alternative ist ein View-Modell, das dieselben Eigenschaften hat wie Ihr Domain-Modell und alle zusätzlichen Eigenschaften, die Ihre Ansicht benötigt (zB 'confirmPassword').

Bevor ich zu viel gelesen habe und bevor ich AutoMapper entdeckt habe, habe ich angefangen, meine eigene Variante des View-Modells zu erstellen, wobei das Domain-Objekt (oder mehrere Domain-Objekte) einfach Eigenschaften des View-Modells sind.

Habe ich eine schlechte Sache gemacht? Welche Probleme oder Vorteile könnten aus diesem Ansatz abgeleitet werden? Unter welchen Umständen könnte diese Art, Dinge zu tun, gut funktionieren?

+0

Wenn Sie das Domänenmodell kapseln, dann ist der Zweck des ViewModels – Omu

+0

Der Hauptgrund war das Aggregieren mehrerer Domänenmodelle, z. B .: Produkt, Warenkorb, Navigation usw. – Myster

Antwort

4

Es ist nichts schlechtes daran, Ihr Domänenmodell direkt der Ansicht auszusetzen. Das primäre Risiko besteht darin, dass Sie eine Eigenschaft offen legen, die Sie nicht haben wollten, wie beispielsweise ein Gehaltsfeld auf einem Employee-Objekt. Achten Sie darauf, wenn Sie JSON zurückgeben.

Eine andere Sache, auf die Sie achten sollten, ist, wenn Sie aus einem Bearbeitungsformular binden. Sie sollten sich über die spezifischen risks, die beteiligt sind bewusst sein. Grundsätzlich könnte ein böswilliger Benutzer dem POST Felder hinzufügen, die zufällig mit Feldern übereinstimmen, die Sie nicht bearbeiten möchten. Ich binde immer an ein intermediäres Objekt, das an einen Dienst übergeben wird, bevor es wieder auf die Domäne abgebildet wird.

+0

Dies gilt nur für Domänenobjekte, die eine Aktion sind Parameter; Es ist nicht verunsichert, sie an Ansichten weiterzugeben. – queen3

+0

@queen Es gibt zwei getrennte Anliegen. Ausgehend: Aussetzen sensibler Felder durch JSON/XML/was auch immer. Eingehend: bösartige Formularparameter. – Ryan

+0

Ich erinnere mich, dass jemand, der das viewModel befürwortet, der SAME-Typ als Aktionsparameter für Postbacks ist. Dieser Ansatz bedeutet, dass Sie Ihr Domänenmodell vollständig trennen müssen. (es sei denn, es soll vollständig geändert werden) – Myster

0

Schlecht? Kann den Automapper nicht verwenden. ;)

Gut? Nichts kommt in den Sinn.

Ich glaube nicht, dass Sie etwas Schreckliches getan haben. Funktioniert es für Sie? Wenn ja, warum nicht?

Verwandte Themen