Estoy diseñando una aplicación ASP.NET MVC utilizando el Onion Architecture descrito por Jeffrey Palermo.Dependencias de archicecture de cebolla en la misma capa: Infraestructura y comunicación web
Es un proyecto de ASP.NET MVC 2.0, en el que estoy requiriendo que todas las vistas se escriban con fuerza utilizando modelos de vista dedicados; no pasaremos modelos de dominio a nuestras vistas. Estamos utilizando AutoMapper para hacer la traducción: AutoMapper está aislado en la infraestructura, Web no sabe o no le preocupa que AutoMapper se esté utilizando.
Actualmente, estoy definiendo las interfaces IViewModelMapping en el proyecto web, simplemente porque este servicio será utilizado por los controladores y tiene acceso directo a sus propios modelos de vista. De esta forma, la interfaz puede acceder tanto a los Modelos de Dominio (en el Núcleo) como a los Modelos de Visualización (en la Web).
Para proporcionar la implementación real de las interfaces IViewModelMapping, creé un espacio de nombres ObjectMapping en el proyecto de Infraestructura, que aislará la implementación de la asignación real a la Intraestructura de la cebolla. Al hacerlo, esto requerirá que la Infraestructura dependa tanto del núcleo como de la web.
Mi pregunta es: dado que ambos proyectos se encuentran técnicamente en las afueras de la cebolla (en la misma capa): ¿se permite que un proyecto dependa de otro proyecto en esa capa? ¿Alguien nota posibles peligros con este diseño?
Un diseño alternativo movería las interfaces IViewMapper a Core, pero esto sería imposible porque Core no tiene acceso a las clases de ViewModel. También podría mover los modelos de vista a Core, pero creo que no pertenecerían allí, ya que son específicos de la capa de UI.
La arquitectura propuesta es la siguiente: observe que Infraestructura tiene una dependencia en Core AND Web. La web permanece aislada y solo tiene acceso a la lógica empresarial Core.
http://www.matthidinger.com/images/onion-arch.png
¿Cuál fue el diseño final que eligió y trabajó? Interesante para ver el diagrama actualizado con alguna estructura de clase para el Mapeo :) –
Pregunta: ¿Por qué _Dependency Resolution Layer_ tiene una dependencia en _Web Layer_? ¿No deberían _Controllers_ tener una dependencia en _Dependency Resolution Layer_? – a11smiles