41 votes

MVC3 et Entity Framework

Ma question est assez simple : est-ce une bonne pratique que de placer la .edmx dans le dossier modèle d'une application Web d'un projet MVC3 ?

96voto

Davide Piras Points 28708

Ma réponse est assez simple : ne pas mélanger la couche de présentation (toute application MVC) avec la logique d'accès aux données et la modélisation des données.

Ayez au moins 4 projets dans votre solution Visual Studio, de bas en haut :

1 - ProjectName.Interfaces (Bibliothèque de classes, interfaces d'entités) ;

2 - ProjectName.DAL (Bibliothèque de classes, la seule autorisée à savoir que l'EF est utilisé, les entités POCO implémentent les interfaces du projet 1 en utilisant un autre fichier où l'on redéclare les mêmes objets en utilisant des classes partielles...) ;

3 - ProjectName.BL (Bibliothèque de classes, logique d'entreprise, référence les deux projets ci-dessus 1 et 2) ;

4 - ProjectName.Web (application ASP.NET MVC, couche de présentation, fait référence aux deux projets 1 et 3 mais PAS au 2) ;

Ceci pour simplifier les choses, bien sûr. D'après mon expérience, il s'agit d'une conception solide, un peu trop lourde pour les très petits projets, mais payante à long terme.

à mon avis, le M de MVC, Model, n'est PAS le modèle de données, n'est pas l'EF, n'est pas là pour faire de l'ORM lié au moteur de base de données spécifique.

cette réponse est bien sûr subjective et se base sur mon expérience personnelle ;-)

9voto

Adam Tuliper - MSFT Points 22478

Je suis tout à fait d'accord avec Davide sur ce point, je veux juste ajouter que vous devriez également envisager d'utiliser les modèles POCO pour générer des objets poco et ne pas renvoyer les objets du cadre d'entité à une autre couche, car cela met alors une dépendance sur le cadre d'entité.

Si vous n'en faites pas un projet distinct, votre code d'accès direct aux données finira inévitablement par être intégré à votre code Web. Je vois cela tout le temps (et nous avons tous été coupables de cela à un moment donné).

3voto

Daryl Teo Points 3670

Je ne pense pas que cela ait beaucoup d'importance.

J'utilise CodeFirst, donc ma classe DbContext va dans le dossier Model.

En réalité, l'EDMX n'est là que pour la génération du code, au-delà de cela, il ne fait pas grand-chose, il n'est pas déployé/publié sur votre serveur, etc. L'endroit où il se trouve n'est donc pas important. Vous pouvez créer un autre dossier pour l'EDMX si vous voulez, ou le mettre dans Model comme vous l'avez demandé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X