ASP.NET MVC ViewModelBuilder Vorschläge

8

Für alles andere als triviale Ansichtsmodelle verwende ich einen Ansichtsmodell-Builder, der die Verantwortung für die Generierung des Ansichtsmodellobjekts übernimmt. Im Moment nutze ich die Konstruktorinjektion der Builder in meine Controller, aber das riecht ein wenig, da der Builder wirklich davon abhängig ist, welche Aktionsmethode ausgeführt wird. Ich habe zwei Ideen im Kopf. Der erste Schritt würde einen benutzerdefinierten ActionFilter beinhalten, der es mir ermöglicht, jede Aktionsmethode mit dem entsprechenden Builder zu versehen, den Sie verwenden können. Die zweite Möglichkeit besteht darin, eine Überschreibung der View-Methode hinzuzufügen, die zum Akzeptieren eines generischen Objekts geöffnet ist.

So sieht mein Code derzeit aus. Beachten Sie, dass der Builder über den ctor injiziert wird.

%Vor%

Hier ist die Option, wie eine aussehen würde:

%Vor%

Oder Option zwei:

%Vor%

Irgendwelche Gedanken oder Vorschläge wären großartig!

    
Marco 18.05.2010, 21:37
quelle

3 Antworten

1

TheBuilder

Ich denke, Sie könnten die Verantwortung für das Konstruieren des korrekten Ansichtsmodells auf den Builder verlagern. und Sie könnten den ViewModel-Typ übergeben, den Sie als Parameter erstellen möchten, etwa wie folgt:

%Vor%

Über Kandidaten

FirstOptionThis

Mit dem obigen Ansatz erhalten Sie mehr Flexibilität in der Ansicht, die Sie innerhalb der Aktion rendern werden (was passiert, wenn Ihr Controller zwischen drei Ansichten wählen sollte, die angezeigt werden sollen und jeder ein anderes Anzeigemodell hat? Filterlösungen werden komplexer .)

ZweiteOption

Die Methode Ansichtsmethode verwendet das Modell und rendert die Ansicht . Es liegt in der Verantwortung des Controllers , das Modell zu erstellen . Da ich ein bisschen orthodox bin, würde ich empfehlen, die Modellbaulogik nicht in die View-Methode zu setzen:).

    
SDReyes 18.05.2010, 22:28
quelle
0

Wenn Sie nach einer Meinung fragen und Ihren Code jetzt sehen, würde ich Ihrer ersten Wahl meine Stimme geben. Ich habe die Filter auf diese Weise ausgiebig verwendet und es ist schön - alles ist an einem Ort, ermöglicht einfach dekorierbare Aktionen, etc.

    
mare 18.05.2010 22:29
quelle
0

Ihr Ansichtsmodell-Aktionsfilter könnte den erwarteten Modelltyp im ViewContext betrachten, anstatt ihn im Attribut zu erfordern.

    
Ryan 18.05.2010 22:39
quelle