Así es como he estado organizando mi MVVM proyectos LINQ w /:
Modelo - pienso en el modelo que el estado del sistema. Proporciona una interfaz para los datos y realiza un seguimiento del estado del sistema. El Modelo no conoce el ViewModel o la Vista; solo proporciona una interfaz pública para sus datos y varios eventos para que los consumidores (generalmente ViewModels) sepan cuándo ha cambiado el estado.
modelo de vista - El modelo de vista es el encargado de organizar o estructurar todos los datos que necesita el Ver, hacer el seguimiento de la situación de la vista (por ejemplo, la fila seleccionada de una cuadrícula de datos), y respondiendo a las acciones en la vista (como presionar un botón). Sabe lo que la vista necesita, pero en realidad no sabe sobre la vista.
Ver - La vista es el aspecto real de la interfaz de usuario. Contiene todos los controles incorporados y personalizados, cómo se organizaron y cómo se diseñaron. Conoce el ViewModel, pero solo con el propósito de enlazar sus propiedades.
Puerta de enlace - Esta es la parte que aborda directamente su pregunta. La puerta de enlace (que es básicamente mi forma de decir "DataAccessLayer") es su propia capa separada. Contiene todo el código (incluidas las consultas LINQ) para CRUD o selecciona, inserta, actualiza y elimina datos desde/hacia su origen de datos (base de datos, archivo XML, etc.). También proporciona una interfaz pública para el Modelo, que permite al Modelo centrarse en mantener el estado del sistema sin tener que preocuparse por los detalles (es decir, las consultas) necesarios para actualizar el origen de datos.
Clases de acceso a datos - En C#, estas son clases muy simples que modelan sus objetos de datos elementales. Cuando selecciona algo utilizando una consulta LINQ, normalmente creará un IEnumerable<T>
o List<T>
donde T
es uno de sus objetos de datos. Un ejemplo de un objeto de datos sería:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
La gran ventaja de un diseño como este es que realmente separa a sus preocupaciones. Todo tiene un trabajo especializado, y es (generalmente) bastante fácil saber qué tipo de cosas van a dónde.
La desventaja es que puede ser excesivo para proyectos pequeños. Terminas creando una gran cantidad de infraestructura para interfaces públicas que básicamente pasan un solo deseo a través de varias capas. Por lo tanto, puede terminar con un escenario como este: [el usuario hace clic en Enviar, ViewModel le dice a Modelo que agregue NuevaPersona, Modelo le dice a Gateway en InsertPersona] en lugar de un escenario como este [usuario hace clic en Enviar, ViewModel agrega un nuevo registro a la base de datos directamente].
Espero que ayude.
A veces, el código de muestra se escribe para ilustrar el punto. El código de producción debe escribirse para que pueda mantenerse y entenderse. – Min