Définition et conception correctes des modèles d'entreprise, de domaine et de vue dans une application en couches MVC
-
28-10-2019 - |
Question
J'ai un ASP.NET MVC3 en C # et Razor. L'architecture de l'application est divisée en couche d'accès aux données (classes EF + référentiel), couche service, contrôleur, ViewModels et View.
Mon application est un tableau de bord , elle doit afficher des statistiques sur les produits en utilisant des graphiques.
Supposons que je dispose de tables Product
et ProductCategory
et que dans un graphique je dois afficher le pourcentage de Products
vendu par ProductCategory
par mois . Dans l'axe des x, j'ai les mois, dans l'axe des y le pourcentage ProductPerCategory / ProductTotal et donc j'ai autant de lignes que ProductCategories
.
Dans ce cas, mon modèle de domaine est constitué par des objets Product
et ProductCategory
sur le EF . Mon dépôt attribue ces objets de domaine à sa couche supérieure (couche de service).
Mon Business Model est créé par l'objet ProductGraph
et mon Service Layer attribue cet objet métier à sa couche supérieure (Controller).
Mon contrôleur prend cet objet ProductGraph
et le mappe au modèle de vue ProductGraphViewModel
à afficher dans la vue.
Cette distinction entre les modèles est-elle correcte? Y a-t-il un manque ou une mauvaise approche sur la définition des objets passés entre les couches?
La solution
Je répondrai à votre question en posant quelques-unes des miennes.
-
Quelle est votre distinction entre «modèle de domaine» et «modèle d'entreprise»?Chacun donne-t-il plus / moins de valeur que l'autre?Sans en savoir plus, je suppose qu'il s'agit de la même chose.
-
Quel est l'avantage de votre couche Service?Les gens (moi y compris) sont souvent tombés dans le piège de la "couche de service", alors qu'en fait, cela ne fait que envelopper vos méthodes de référentiel.Vous finissez par divulguer des spécificités ORM pour consommer des couches, ce qui fait échouer le point de votre abstraction en premier lieu.
Cela pourrait aider si vous nous donnez un code d'exemple de flux entre les couches.
Et oui, @ sweaver2112 est parfait pour l'utilisation de DI.Configuration simple, avantage maximal.
Autres conseils
Eh bien, vous avez le pouce de mon profane, cela semble assez standard.Voici quelques autres éléments à prendre en compte: 1) votre couche DAL / service est-elle interfacée?et 2) utilisez-vous l'injection de dépendances (en passant ces interfaces à l'instanciation du contrôleur)?De cette façon, vous pouvez facilement changer d'implémentation ou simuler des tests unitaires.
Ce article de blog pourrait être deintérêt.