Définition et conception correctes des modèles d'entreprise, de domaine et de vue dans une application en couches MVC

StackOverflow https://stackoverflow.com/questions/9374746

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?

Était-ce utile?

La solution

Je répondrai à votre question en posant quelques-unes des miennes.

  1. 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.

  2. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top