wie ViewModel entworfen wird

8

Ich habe EF 4 im Projekt implementiert. Darin befinden sich Tabellen Kunden und Bestellung. Welche Beziehung hat (Kunde) zu vielen (Bestellung).

Ich erstelle ein Viewmodel für beide (CustomerViewModel und OrderViewModel), das von meiner Domain-Ebene an die Interface-Ebene (in diesem Fall MVC) übergeben wird.

Jetzt ist die Frage "muss ich beide Viewmodel referenzieren? zum Beispiel in customerviewmodel hat IEnumerable<OrderViewModel> und in orderviewmodel hat CustomerViewModel . Wenn ja, wie entwerfe ich es (als Best Practice), so dass IEnumerable<OrderViewModel> und CustomerViewModel wird mit der richtigen Referenz gefüllt?

    
user384080 27.03.2012, 00:30
quelle

1 Antwort

23

Ich würde immer das Design von ViewModels mit Blick auf die spezifische Sichtweise vorantreiben, niemals aus der Sicht des Domänenmodells (= die Entitäten). Wie ein ViewModel aussieht, hängt davon ab, was Sie anzeigen möchten und was Sie in einer Ansicht ändern möchten.

Als Ergebnis haben Sie nicht die OrderViewModel und die CustomerViewModel , weil Sie verschiedene Ansichten haben, die eine Bestellung oder einen Kunden oder Teile davon anzeigen oder bearbeiten. Also, Sie haben diese ViewModels für einen bestimmten Zweck und Ansicht und daher mehrmals in verschiedenen Variationen.

Angenommen, Sie haben eine OrderEditView und diese Ansicht ermöglicht es, Bestellinformationen zu bearbeiten und den Kunden dieser Bestellung anzuzeigen. Sie hätten ein OrderEditViewModel wie folgt:

%Vor%

Dieser OrderEditCustomerViewModel benötigt keinen Verweis auf OrderEditViewModel .

Sie können dieses ViewModel wie folgt auffüllen:

%Vor%

Wenn Sie andererseits ein CustomerEditView haben, mit dem Sie Kundeninformationen bearbeiten und die Bestellungen des Kunden in einer Liste anzeigen können, könnte das ViewModel wie folgt aussehen:

%Vor%

Hier benötigt CustomerEditOrderViewModel keinen Verweis auf CustomerEditViewModel und Sie können das ViewModel auf diese Weise aus der Datenbank erstellen, zum Beispiel:

%Vor%

Die Customer(*)ViewModel s und die Order(*)ViewModel s unterscheiden sich in Bezug auf die erforderlichen Referenzen, die Eigenschaften und die Datenanmerkungen, abhängig von der Ansicht, in der sie verwendet werden.

Unter Berücksichtigung dieser Überlegungen verschwindet die Frage nach gegenseitigen korrekten Referenzen zwischen OrderViewModel und CustomerViewModel , da Sie normalerweise keine solche bidirektionale Referenz für Ihre Ansichten benötigen.

    
Slauma 04.04.2012, 23:49
quelle

Tags und Links