En mi aplicación ASP.NET MVC, tengo una página de edición bastante compleja que combina una cantidad de modelos en una vista.ASP.NET MVC - ¿Debo usar el patrón de repositorio para escribir modelos de vista en la base de datos o convertirlos a modelos primero?
Estoy usando el patrón ViewModel para combinar toda esta información y presentar un objeto cohesivo a la Vista.
Como un ejemplo, la estructura de mi ViewModel es algo como esto:
CompanyId
CompanyName
List<Employee> Employees
List<ContactMethod> ContactMethods
El objeto empleado tiene un número de propiedades básicas, y un método de contacto preferido.
En la página de edición, el usuario recibe todos los empleados de la empresa y tienen la capacidad de agregar y eliminar (mediante javascript), así como editar los detalles de los empleados. La lista ContactMethods se usa para completar el menú desplegable de cada empleado.
He traducido satisfactoriamente mis Modelos (leídos de la base de datos) en este ViewModel y viceversa, así que después de una edición, me queda un ViewModel que representa el estado actual de los empleados de esa compañía.
Estoy usando un patrón Repositorio para comunicarme con la base de datos, por lo que mi pregunta es ¿debo llamar directamente al CompanyRepository, pasar el ViewModel, o debo convertir el ViewModel de nuevo en objetos Model primero antes de usar el Repositorio para escribirlos en la base de datos?
En resumen, ¿debería saber el repositorio acerca de mis objetos ViewModel?
Si ese es el caso (y esto está bien), necesitaría crear estos Modelos de Empleados, eliminar todos los Empleados existentes de esa Compañía, luego agregar los nuevos Modelos de Empleados ... o ... Recuperar todos los modelos de Empleados de la base de datos y los relaciona antes de agregar, eliminar y editar, según corresponda. Suena bien? – Damovisa
@Damovisa: podrías hacer eso. En cambio, mantendría esa información durante la edición. En su ViewModel mantenga tres listas: EmployeeEmployees, EditedEmployees, DeletedEmployees. – manu08
@ manu80 - Veo cómo podría funcionar, pero podría ser un poco complicado. La interfaz de usuario tendría que cambiar un poco para dar cuenta de estas tres colecciones, incluso si solo es el cambio de JavaScript. – Damovisa