Estoy creando una aplicación MVVM. Estoy tratando de estructurar mi aplicación como esta:MVVM y capas, implementación de la capa de servicio
no sé si este enfoque es común en MVVM. De todos modos, ViewModel usa la capa de servicio para, por ejemplo, poblar el modelo o la colección Observable que está envolviendo. Para hacer uso de sus servicios, el modelo de vista tiene un campo que contiene una abstracción del servicio, así:
IService service;
porque uso de LINQ para consultar la base de datos, que tienen las entidades que tienen los mismos nombres que mi dominio nombres. Para que ViewModel no tenga conocimiento de las entidades de Capa de servicio/Base de datos, necesito que la Capa de servicio devuelva un Modelo de dominio en lugar de una entidad de base de datos generada por Linq. Lo hago de la siguiente manera (un ejemplo de algo que estoy trabajando en el trabajo):
ObservableCollection<ItemTypeViewModel> GetItemTypes()
{
DataContextLocalDB dc = new DataContextLocalDB();
ObservableCollection<ItemTypeViewModel> itemTypes = new ObservableCollection<ItemTypeViewModel>();
foreach (ItemType itemType in dc.ItemTypes)
{
Models.ItemType type = new Models.ItemType();
type.Name = itemType.Name;
type.Description = itemType.Description;
ItemTypeViewModel itemTypeViewModel = new ItemTypeViewModel(type);
itemTypes.Add(itemTypeViewModel);
}
}
Hay un par de cosas que no estoy satisfecho/seguro acerca de:
- Es este un buen forma de estructurar en combinación con MVVM?
- Estoy obligado a usar Models.ItemType para hacerlo diferente del ItemType que viene de la base de datos. ¿Es esto inevitable?
- Devolveré una ObservableCollection - tal vez otra cosa sería mejor devolverla y luego en algún lugar hacer lo que devolví una ObservableCollection?
- En general, ¿qué podría mejorarse o qué podría ser un error de juicio que vea que hice?
Gracias :-)
Sí, lo sé acerca de la L2SQL. Acerca de la Entidad y el Modelo de Dominio, ¿dices que puedo dejar de tener un Modelo de Dominio? En muchos ejemplos sobre MVVM, veo personas que tienen un modelo que devuelven, algo como esto: 'foreach (Person person en this.db.Person) {this.persons.Add (new PersonViewModel (person));', donde Person is un Modelo de Dominio, no una Entidad. El Modelo de Dominio de Persona es como dicen Anemic. ¿Por qué uno tendría un Modelo de Dominio si son lo mismo que la entidad? – TheDude
Eso es exactamente lo que estoy diciendo. en cuanto a por qué están replicando objetos sin necesidad, ¡pregúnteles! ;) –