2010-04-08 8 views
5

J'ai vu beaucoup d'exemples MVC où les objets de domaine sont passés directement aux vues, cela fonctionnera très bien si votre vue est simple. L'alternative commune est d'avoir un modèle de vue qui a toutes les mêmes propriétés que votre modèle de domaine + toutes les propriétés supplémentaires dont votre vue peut avoir besoin (comme 'confirmPassword'). Avant d'en faire trop, avant de découvrir AutoMapper, j'ai commencé à créer ma propre variante de view-model où l'objet-domaine (ou les objets à domaines multiples) sont simplement des propriétés du view-model.asp.net MVC est-ce qu'un View-Model encapsule le Domain-Model?

Ai-je fait une mauvaise chose? Quels problèmes ou avantages pourraient découler de cette approche? Dans quelles circonstances cette façon de faire fonctionne-t-elle bien?

+0

Si vous encapsulez le Domain-Model, quel est le but de ViewModel – Omu

+0

La raison principale était d'agréger plusieurs modèles de domaine, par exemple: Product, Basket, Navigation etc – Myster

Répondre

4

Il n'y a rien de mal en soi à exposer directement votre modèle de domaine à la vue. Le principal risque provient de l'exposition d'une propriété à laquelle vous ne pensiez pas, comme un champ salaire sur un objet Employee. Assurez-vous de faire attention à cela si vous renvoyez JSON.

Une autre chose à surveiller est lorsque vous vous reconnectez à partir d'un formulaire d'édition. Vous devez être au courant de la risks spécifiques qui sont impliqués. Fondamentalement, un utilisateur malveillant pourrait ajouter des champs au POST qui correspondent à des champs que vous ne vouliez pas être éditables. Je lie toujours à un objet intermédiaire qui est passé dans un service avant de le mapper au domaine.

+0

Cela s'applique uniquement aux objets de domaine qui sont l'action paramètres; il n'y a rien d'insécurisant à les transmettre aux vues. – queen3

+0

@queen Il existe deux problèmes distincts. Sortant: exposer des champs sensibles via JSON/XML/any. Entrant: paramètres de formulaire malveillant. – Ryan

+0

Je me souviens que quelqu'un préconisant viewModel est le même type que le paramètre Action pour les publications. Il semble que cette approche signifie que vous devez séparer complètement votre modèle de domaine. (à moins qu'il ne soit entièrement ouvert à la modification) – Myster

0

Mauvais? Impossible d'utiliser Automapper. ;)

Bon? Rien ne vient à l'esprit.

Je ne pense pas que vous ayez fait quelque chose d'horrible. Est-ce que ça marche pour toi? Si oui, pourquoi pas?