En un proyecto ASP.NET MVC, estamos utilizando AutoMapper para mapear desde el modelo de dominio al modelo de vista y, a veces, también aplanamos una jerarquía mientras lo hacemos. Esto funciona como un amuleto y hace que la lógica de renderizado de nuestros puntos de vista sea muy simple.Cómo cambiar el modelo de edición/postmodelo al modelo de dominio
La confusión comienza cuando queremos ir al revés de viewmodel (o postmodelo o editmodel) al modelo de dominio, especialmente al actualizar los objetos. No podemos usar automatizado/mapeo bidireccional porque:
- tendríamos que unflat la jerarquía aplanada
- todas las propiedades en el modelo de dominio tendría que ser mutable/tienen los emisores públicos
- los cambios Desde la vista, no siempre son solo las propiedades planas que se vuelven a asignar al dominio, sino que a veces se deben llamar a métodos como "
ChangeManagerForEmployee()
" o similar.
Esto también se describe en el artículo Bogards Jimmy: The case for two-way mapping in AutoMapper, pero la solución a esto no se describe en detalle, sólo que van:
De EditModel a CommandMessages - que va desde el loosely- tipeado EditModel a mensajes fuertemente tipados y descompuestos. Un único EditModel podría generar media docena de mensajes.
En un similares SO question hay una respuesta por Mark Seeman donde se menciona que
Utilizamos creadores de mapas y servicios abstractos para asignar una PostModel a un objeto de dominio
pero los detalles - la implementación conceptual y técnica, queda fuera.
Nuestra idea en este momento es:
- Recibir FormCollection en el método de la acción del controlador
- Obtener el modelo de dominio original y aplanarlo a viewModelOriginal y viewModelUpdated
- La fusión de la FormCollection en viewModelUpdated usando
UpdateModel()
- Usa algún método de ayuda genérico para comparar viewModelOriginal con viewModelUpdated
- Cualquiera A) Generar CommandMessages un Jimmy Bogard o B la) mutar las diferencias directamente en el modelo de dominio a través de propiedades y métodos (tal vez que trazan los 1-1 propiedades directamente a través de AutoMapper)
Puede alguien proporcionar algunos ejemplos de cómo vienen de FormCollection través editmodel/postmodel a modelo de dominio? "CommandMessages" o "mapeadores y servicios abstractos"?
Daría esta pregunta mil votos a favor si pudiera. He estado buscando infinitamente una respuesta sólida a esto. – devuxer
¿Qué proceso usaste al final? –
Hola Tom. Terminamos usando una solución de mezcla y coincidencia, donde 1. Recuperamos el objeto Dom de DAL/DB, 2. aplanamos el objeto Dom en ViewModel, 3. usamos TryUpdateModel con FormColl en ViewModel, 4.use AutoMapper para hacer un mapeo inverso desde el modelo de vista aplanado a Dom (jerarquía) en propiedades simples y 5. use un servicio para mapear propiedades no triviales del modo de vista a métodos Dom (objeto Dom y/o Dom Service). Espero que esto ayude. No estoy seguro de qué respuesta marcar como correcta, ya que es una mezcla de más de uno ... –