2009-09-30 12 views
9

Questions rapides vraiment.ASP.NET MVC - Modèle Linq to Entities comme ViewModel - est-ce une bonne pratique?

Je suis actuellement en train de construire un site utilisant asp.net MVC et le framework d'entité. J'ai quelques référentiels en place qui renvoient des entités ou des listes d'entités. Je constate que dans la majorité de mes pages, je dois extraire des données de diverses tables connexes. C'est correct tant que je charge les entités liées en utilisant 'include' dans mes requêtes - mais est-ce une bonne pratique? Serait-il préférable de créer un objet viewmodel personnalisé qui contient juste les informations dont j'ai besoin, ou est-ce qu'il n'y a rien de mal à tirer un graphe d'objet qui est peut-être 5 - 6 tables juste pour afficher ce dont vous avez besoin à votre avis? Excuse si cette question n'a pas beaucoup de sens.

Je peux avoir fondamentalement mal compris comment un modèle doit être utilisé ici :)

Merci

+0

Bonne question, sera intéressé d'entendre la réponse. – Paddy

+0

+1, j'ai eu une question similaire à propos de l'utilisation de DTO au lieu de modèles d'entité: http://stackoverflow.com/questions/1450209/is-my-asp-net-mvc-application-structured-properly – Brandon

+0

Merci Brandon - juste lire votre message et oui, il semble que nous sommes préoccupés par des choses similaires. Parfois, je m'inquiète que j'ai passé trop de temps à m'inquiéter de la meilleure pratique :) – Sergio

Répondre

2

Je suggère la révision du code de rendu dans vos vues et le code d'affichage dans vos contrôleurs. Sont-ils rendus trop complexes par l'approche que vous prenez? Sinon, vous êtes probablement autorisé à garder les choses telles qu'elles sont. Si le code de la vue et du contrôleur est grandement simplifié en introduisant un modèle de vue personnalisé, envisagez d'en créer un. Les modèles de vue personnalisés résument essentiellement une partie de cette complexité qui est probablement traitée ailleurs à l'heure actuelle.

+0

Ça a du sens. Fondamentalement, j'ai actuellement une situation où je tire diverses «tables» de mon modèle d'entité. Organisations-> Bâtiments-> Chambres-> Atouts. Lorsque j'affiche les détails d'un actif, je dois également montrer ses informations sur la pièce et le bâtiment. En ce moment, je suis en train de saisir un graphe d'objets de taille et de tirer ce dont j'ai besoin dans la vue. J'étais juste inquiet que je ramenais trop du modèle. Mais, il fonctionne. – Sergio

3

Si vos vues commencent à faire des choses comme

<% foreach (var order in Model.Orders.Any(x => x.Products.Any(p => p.Category == "xx")) %>

alors vous avez certainement ViewModel. Vous pouvez aller avec

ViewData["flattened_orders"]

si vous préférez cordes magiques, mais je doute ainsi. Puis, il y a une question sur les attributs de présentation nécessaires sur vos entités, vous devez ensuite exposer toutes les propriétés pour que le classeur puisse fonctionner ... alors vous avez besoin d'autres informations de présentation comme la liste des pays ... Ainsi, pour les applications simples, vous pouvez ignorer ViewModel. Mais pour des applications simples, vous pouvez faire Response.Write et SQL manuel, de toute façon ;-)

J'aime vraiment this après un problème similaire. L'approche représentée ici peut sembler trop "académique" au premier abord, mais c'est de vrais projets, et plus je fais ASP.NET MVC, plus je l'aime et me rapproche d'elle.

+0

merci, c'est un bon conseil.Je suis en train de trouver que je dois naviguer à travers un nombre de relations d'entités pour obtenir ce dont j'ai besoin et je commence à penser que plus les données sont bonnes, mieux c'est. – Sergio

Questions connexes