38 votes

Dépendances d'architecture d'arc dans la même couche: Infrastructure et communication Web

Je suis en train de concevoir un ASP.NET application MVC à l'aide de l' Oignon, de l'Architecture décrite par Jeffrey Palerme.

C'est un ASP.NET MVC 2.0 projet, où je suis exigeant que tous les points de vue fortement typée dédié à l'aide des Modèles de Vue -- nous ne serons pas en passant des modèles de domaine de notre point de vue. Nous sommes à l'aide de AutoMapper pour faire la traduction -- AutoMapper est isolé dans l'infrastructure, le Web ne sais pas ou des soins AutoMapper est utilisé.

Actuellement, je suis à la définition de la IViewModelMapping des interfaces dans le projet Web -- tout simplement parce que ce service sera utilisé par les Contrôleurs et il a un accès direct à ses propres Modèles de Vue. De cette façon, l'interface peut accéder à la fois les Modèles de Domaine (dans le Noyau) et les Modèles de Vue (sur le Web).

Afin de fournir à la mise en œuvre effective de la IViewModelMapping interfaces, j'ai créé un ObjectMapping espace de noms dans le projet d'Infrastructure, qui permettra d'isoler le véritable cartographie de la mise en œuvre de l'Intrastructure de l'oignon. En agissant de la sorte, cela va nécessiter une Infrastructure d'avoir une dépendance à la FOIS le Noyau ET le Web.

Ma question est: étant donné que ces deux projets sont techniquement sur la périphérie de l'oignon (dans la même couche) - est un projet a permis d'avoir une dépendance sur un autre projet dans cette couche? Quelqu'un préavis de pièges potentiels avec cette conception?

Une alternative pourrait être de déplacer la IViewMapper interfaces de Base-mais ce serait impossible parce que de Base n'ont pas accès aux classes ViewModel. Je pourrais aussi déplacer le point de vue des modèles de Base, mais je me sens comme ils le feraient pas partie là-bas, car ils sont spécifiques à la couche d'INTERFACE utilisateur.

L'architecture proposée est la suivante -- avis que l'Infrastructure a une dépendance sur le Cœur ET le Web. Web reste isolé et n'a accès à la Base de la logique métier.

onion-arch.png

28voto

Jeffrey Palermo Points 336

Il est exact que vous ne voulez pas de l'Infrastructure dépendent de l'INTERFACE utilisateur(Web), mais je casse la règle parfois.

Je pense qu'au lieu de IViewModelMapping, créer IMapper avec la méthode Map(). Ensuite, l'interface peut avoir des implémentations qui pourrait avoir à faire avec la vue du modèle de cartographie, ou peut-être juste cartographie régulière. De toute façon, cette interface peut être dans le Cœur, car il n'est pas sémantiquement lié à tout type de modèle.

Grand graphisme. J'espère que j'ai répondu à la viande de votre question. L'ensemble de la philosophie de l'Oignon, de l'Architecture est de garder votre logique métier et le modèle dans le milieu (de Base) de votre application et de pousser vos dépendances autant l'extérieur que possible.

0voto

AlBaraa Sh Points 39

Essayez de déplacer le mappage d'objets dans la couche Web .

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