Les dépendances d'architecture d'Onion dans la même couche: Infrastructure et Communication Web
je dessine un ASP.NET application MVC en utilisant le Architecture Oignon<!-Décrit par Jeffrey Palermo.
C'est un ASP.NET MVC 2.0 project, où je demande que toutes les vues soient fortement dactylographiées en utilisant des modèles de vue dédiés -- nous ne passerons pas de modèles de domaine à nos vues. Nous utilisons AutoMapper pour faire la traduction -- AutoMapper est isolé dans l'infrastructure, le Web ne sait pas ou ne se soucie pas que AutoMapper est utilisé.
Actuellement, je suis définir les interfaces IViewModelMapping dans le projet Web -- simplement parce que ce service sera utilisé par les contrôleurs et qu'il a un accès direct à ses propres modèles de vue. De cette façon, l'interface peut accéder à la fois aux modèles de domaine (dans le noyau) et aux modèles de vue (dans le Web).
afin de fournir la mise en œuvre effective des interfaces IViewModelMapping, j'ai créé un espace de noms ObjectMapping dans le projet D'Infrastructure, qui isolera la mise en œuvre effective de mapping Intrastructure de l'oignon. Pour ce faire, L'Infrastructure devra dépendre à la fois du noyau et du Web.
ma question Est: puisque ces deux projets sont techniquement à la périphérie de l'oignon (dans la même couche) -- est-ce qu'un projet est autorisé à avoir une dépendance sur un autre projet dans cette couche? Quelqu'un préavis de pièges potentiels avec cette conception?
une autre solution consisterait à déplacer les interfaces IViewMapper dans le noyau -- mais cela permettrait impossible car Core n'a pas accès aux classes ViewModel. Je pourrais aussi déplacer les modèles de vue dans Core, mais j'ai l'impression qu'ils n'y appartiendraient pas, puisqu'ils sont spécifiques à la couche UI.
l'architecture proposée est la suivante -- notez que L'Infrastructure dépend du Core et du Web. Web reste isolé et n'a accès qu'à la logique opérationnelle de base.
3 réponses
vous avez raison de dire que vous ne voulez pas que L'Infrastructure dépende de L'UI(Web), mais j'enfreins parfois cette règle.
je pense qu'au lieu D'IViewModelMapping, créer IMapper avec method Map (). Ensuite, l'interface peut avoir des implémentations qui pourraient avoir à faire avec la mapping de modèle de vue, ou peut-être juste la mapping régulière. Quoi qu'il en soit, cette interface peut être dans Core parce qu'elle n'est pas liée sémantiquement à n'importe quel type de modèle.
beaucoup de graphiques. J'espère que j'ai répondu à la viande de votre question. La philosophie générale de L'architecture oignon est de garder votre logique et modèle d'affaires au milieu (Cœur) de votre application et de pousser vos dépendances aussi loin que possible.