comment concevoir ViewModel
J'ai EF 4 mis en œuvre dans le projet. À l'intérieur, il y a des tables client et commande. Qui a une relation (client) à un grand nombre (de l'ordre).
Je suis de la création d'un viewmodel pour les deux (CustomerViewModel et OrderViewModel) à être passés à partir de mon domaine de couche à la couche d'interface (MVC dans ce cas).
Maintenant la question est: "j'ai besoin de faire référence à la fois viewmodel? par exemple, dans customerviewmodel a IEnumerable<OrderViewModel>
et dans orderviewmodel a CustomerViewModel
. Si oui, comment dois-je de conception (comme une meilleure pratique), de sorte que IEnumerable<OrderViewModel>
et CustomerViewModel
est rempli avec la bonne référence?
désolé de ne pas pertinent..
OriginalL'auteur user384080 | 2012-03-27
Vous devez vous connecter pour publier un commentaire.
Je serais toujours orienter la conception des ViewModels avec le point de vue spécifique à l'esprit, jamais du point de vue du modèle de domaine (= les entités). Comment un ViewModel semble dépend de ce que vous voulez afficher et que vous souhaitez modifier dans la vue.
Comme un résultat que vous n'avez pas LE
OrderViewModel
et LACustomerViewModel
parce que vous avez de différents points de vue qui permet d'afficher ou de modifier une commande ou de client ou de parties de ceux-ci. Donc, vous avez ces Viewmodel pour un usage spécifique et de vue et, par conséquent, à de multiples reprises dans différentes variations.Imaginons que vous ayez un
OrderEditView
et de ce point de vue vous permettent de modifier les informations de commande et d'affichage le client de la commande. Vous avez uneOrderEditViewModel
comme ceci:Ce
OrderEditCustomerViewModel
n'a pas besoin d'une référence à laOrderEditViewModel
.Vous pouvez remplir ce ViewModel de la sorte:
D'autre part, si vous avez un
CustomerEditView
qui permet d'éditer les informations du client et affiche les commandes du client dans une liste, le ViewModel peut-être:Ici
CustomerEditOrderViewModel
n'a pas besoin d'une référence à laCustomerEditViewModel
et vous pouvez créer le ViewModel de la base de données de cette manière par exemple:La
Customer(*)ViewModel
s et leOrder(*)ViewModel
s sont différents - en ce qui concerne les références nécessaires, les propriétés et les annotations de données, selon le point de vue où ils sont utilisés.Avec ces considérations à l'esprit la question pour les mutuelles de corriger les renvois entre les
OrderViewModel
et laCustomerViewModel
disparaît parce que vous n'avez normalement pas besoin d'une telle bidirectionnel de référence pour vos points de vue.aussi.. comment voulez-vous remplir public IEnumerable<CustomerEditOrderViewModel> les Commandes { get; set; } dans le CustomerEditViewModel? faites-vous des paresseux ou impatient?
La cartographie de l'EF entité ViewModel sont les deux fragments de code avec la
Select
(il est appelé "projection" et ni paresseux, ni désireux de chargement, mais plus proche désireux de chargement, sauf que vous récupérer uniquement les colonnes de la DB qui sont vraiment nécessaires pour le ViewModel, ce n'est pas toute entité qui serait une surcharge inutile). Surtout le dernier extrait renseigne également leOrders
collection (voir l'intérieureSelect
). Pour le chemin du retour de ViewModel pour l'entité I utilisation des Otd, vous pouvez mapper manuellement les propriétés de ViewModel pour DTO ou d'utiliser un outil comme AutoMapper.J'ai posé une question similaire il y a quelques temps, peut-être que cela aide: stackoverflow.com/questions/5995140/...
OriginalL'auteur Slauma