Ich habe vor kurzem in MVC gearbeitet, und ich bin neugierig darauf, wie ich meine Ansichtsmodelle am besten initialisieren kann. Soll ich es direkt in der Steuerung zuordnen, oder sollte ich die Eigenschaften in einem Konstruktor für das Ansichtsmodell initialisieren. Wenn Sie Listen haben, ist dies auch eine bessere Vorgehensweise, da Sie sie bei einem Validierungsfehler nicht erneut auffüllen müssen.
Zum Beispiel, wenn ich das folgende Modell hätte:
%Vor%und dann der Controller:
%Vor%oder sollte ich es in meinem Modell tun:
%Vor%dann mein Controller:
%Vor%Welches ist die bevorzugte Konvention in MVC und warum ist es die beste Praxis? Auch, Gründe warum man sich über den anderen entscheidet? Vielen Dank im Voraus.
Standardmäßig glaube ich nicht, dass MVC den DependencyResolver verwendet, um die Instanz Ihres Ansichtsmodells beim Postback zu erstellen. Daher wird nur ein Modell mit einem parameterlosen Konstruktor erstellt. Dies macht es weniger einfach, das Objekt im Konstruktor zu initialisieren.
Sie könnten ein benutzerdefiniertes Modellbinderelement erstellen, das das Objekt über DependencyResolver erstellt hat, aber dann weichen Sie von der normalen Vorgehensweise ab.
Ich bevorzuge es, meine Ansichtsmodelle mit AutoMapper zu initialisieren.
Im Allgemeinen wollen Sie schwere Modelle und Lichtsteuerungen, also machen Sie so wenig wie möglich in Ihrem Controller.
Allgemeine Entwurfsmustergründe sollten Sie das ViewModel im Ansichtsmodell initialisieren?
Ich benutze immer den zweiten Ansatz, aber mit einem "all-properties as parameters" -Konstruktor anstatt "Foobar" in den Konstruktor einzufügen (eine Art Verletzung des MVVM-Patterns, da das ViewModel unabhängig bleiben soll).
Für mich ist es das beste Verfahren, weil Sie zusätzliche Logik im Viewmodel verstecken können und Sie die Möglichkeit haben, mit verschiedenen Konstruktoren ein anderes Verhalten zu erzeugen.
Ich denke, Sie haben im zweiten Fall gute Arbeit geleistet. Meiner Meinung nach liegt die Verantwortung für das Objekt selbst in der Verantwortung.
Was ist, wenn Sie eine andere Instanz dieser Klasse woanders brauchen? Sie müssen den Initialisierungscode von wo auch immer Sie zuerst erstellten kopieren.
Tags und Links asp.net-mvc asp.net-mvc-3 .net c#