Actualmente estoy pasando mis objetos de dominio a mis vistas y vinculándolos directamente desde los POST. Todo el mundo dice que esto es malo, así que estoy intentando agregar el concepto de ViewModel.usando ViewModels para acciones POST en MVC elegantemente
Sin embargo, no puedo encontrar una manera de hacerlo de forma muy elegante, y me gustaría saber qué soluciones tienen otras personas para no terminar con una acción de controlador muy desordenada.
el proceso típico para decir algo de "añadir persona" funcionalidad se ve así:
- realizar una solicitud GET para una vista que representa un modelo de vista Persona en blanco
- segundo palo (de) datos válidos
- controlador vincula datos publicados en una persona viewmodel
- si falla el enlace, tengo que hacer la misma acción que en (1) pero con algunos datos, no un objeto en blanco y errores
- si se realizó el enlace, yo necesite asignar las propiedades de la máquina virtual en un modelo real
- validar el modelo
- si la validación pasó: salvar a la persona, comprometerse, mapear los datos de los usuarios a una pantalla VM y devolverlo en una vista
- si la validación fallado, haga las mismas acciones que en (1) pero con algunos datos y errores
Hacer todo esto en una acción de controlador (ignorando el GET) ciertamente no es SRP o DRY.
Estoy tratando de pensar en una forma de romper este proceso para que cumpla con SRP, es limpio, modular y, sobre todo, comprobable.
¿Qué es la solución de personas a esto?
He estado experimentando con invocadores de acción-controlador personalizados para separar las preocupaciones en métodos individuales, encuadernadores inteligentes y simplemente fuerza bruta, pero aún no he encontrado una solución que me satisfaga.
P.S. ya que añade tanta complejidad, convencerme de eso que aún tiene que molestarse
¿Qué le termina haciendo? –
nada todavía :(todavía estoy tratando de decidir sobre una solución elegante para que mis controladores no terminen realmente abarrotados. Creo que la verdadera respuesta es openrasta. –
Quizás estas publicaciones puedan ayudar un poco: http://stackoverflow.com/a/25460769/3969501, http://stackoverflow.com/a/25169023/1475331 –