Patrón de repositorio MVC: ¿cuándo usar AutoMapper?

Usamos Telerik ORM para generar nuestros modelos de dominio y tenerlos en una biblioteca de clases que se llama DAL. Luego tenemos nuestro proyecto de interfaz de usuario, que es una aplicación web MVC 4. En esto, tenemos repositorios y modelos. Los modelos aquí son los modelos de vista, específicamente para mostrar datos en las vistas.

Ahora mis preguntas son:

  1. ¿Debería el repositorio devolver directamente el modelo de vista?
  2. ¿Debería convertirse el modelo de vista en una entidad?
  3. ¿Cuál es la sobrecarga en el uso de automapper? ¿Dónde se debe usar?

Si no convertimos al modelo de vista en el repositorio usando el mapeador automático, es posible que tengamos diferentes llamadas a la base de datos para completar cada parte del objeto. Un modelo de vista para una página puede tener una lista de contactos y un contacto seleccionado. El contacto seleccionado se completará con una llamada al repositorio y la lista de contactos se completará con otra llamada. Además, si el mapeador está en el nivel del repositorio, ¿no sería mejor eliminar todos los 'campos adicionales' como el género si solo estamos interesados ​​en 'nombre e identificación'?

Escuché que el repositorio no debería devolver modelos de vista porque los modelos de vista son específicos de la interfaz de usuario y no deberían estar involucrados en la capa de datos. ¿Es esto cierto?

preguntado el 07 de marzo de 13 a las 22:03

2 Respuestas

Su repositorio debe devolver objetos de dominio sin formato. El mapeador ORM debería generar estos como clases estrechamente asignadas a la fuente de datos. Para permitir que sus repositorios/controladores se puedan conectar a varios formularios, como servicios web, aplicaciones web y otros proyectos con pocas molestias, no se deben aplicar atributos de interfaz de usuario.

Automapper es excelente cuando tiene como objetivo múltiples implementaciones de las interfaces de su repositorio, como con los contenedores DI. Es muy útil al traducir sus objetos de dominio a/desde objetos de clase de almacenamiento. Básicamente reduce la necesidad de clases de traducción.

En el área MVC.Model, es posible que deba crear duplicados de las clases de objetos de dominio que utiliza en la interfaz de usuario como modelos. A medida que crezca su proyecto, verá la ventaja de esto, especialmente si está utilizando varios atributos para validación, visualización, localización, etc. Herramientas como Automapper aumentan enormemente la productividad cuando tiene clases con convenciones de nomenclatura muy cercanas.

También verá una ganancia en la productividad si usa un mapeador en sus clases Mvc.Controller para traducir de datos/controlador a MVC.Modelos.

La clave es ser consistente con los nombres de propiedad en sus clases a través de los límites de la aplicación.

respondido 07 mar '13, 23:03

Este es actualmente un tema de discusión. jimmy bogard La sugerencia es usar Automapper para mapear solo modelos de dominio en modelos de vista. Si desea modelos de vista posterior demasiado desflados a modelos de dominio, le sugiero que intente Inyector de valor

respondido 08 mar '13, 01:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.