tutorial net mvc espaƱol component asp asp.net-mvc architecture n-tier onion-architecture

asp.net mvc - net - Dependencias de archicecture de cebolla en la misma capa: Infraestructura y comunicaciĆ³n web



partial views asp net mvc (3)

Estoy diseñando una aplicación ASP.NET MVC utilizando la arquitectura de cebolla descrita por Jeffrey Palermo.

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

Con el fin de 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 estaría moviendo 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


Intente mover el mapeo de objetos a la capa web .


Su capa Web / UI puede depender de la capa Infraestructura. Pero no es un buen diseño tener la dependencia de la capa Web on Infrastructure. La arquitectura de cebolla dice empuja tus dependencias lo más hacia afuera posible.

Puede crear una carpeta "/ Builder" en la interfaz de usuario. Agregue un archivo de interfaz, ejemplo. IBuilder o IMapper y declare un método como ConvertToViewModel o CreateMapping en él. lo que quieras.

* Builder ** IBuilder.cs -declare un método aquí. ** Builder.cs - - Implemente el método aquí, defina el mapeo entre un modelo de vista y su correspondiente modelo de dominio (referencia desde la capa central) y devuelva el modelo de vista apropiado aquí.


Tiene razón al decir que no quiere que la Infraestructura dependa de la IU (Web), pero a veces la rompo.

Creo que en lugar de IViewModelMapping, crea IMapper con el método Map (). Entonces, la interfaz puede tener implementaciones que podrían tener que ver con el mapeo del modelo de vista, o tal vez solo el mapeo regular. De cualquier manera, esa interfaz puede estar en Core porque no está vinculada semánticamente a ningún tipo de modelo.

Gran gráfico. Espero haber respondido la carne de tu pregunta. La filosofía general de Onion Architecture es mantener su lógica y modelo de negocio en el medio (núcleo) de su aplicación y empujar sus dependencias lo más hacia afuera posible.