Я создаю приложение MVVM.Я пытаюсь структурировать свое приложение так:
![enter image description here](https://i.stack.imgur.com/GCLB9.png)
Я не знаю, распространен ли такой подход в MVVM.В любом случае, ViewModel использует сервисный уровень, например, для заполнения Model или ObservableCollection, которую он упаковывает.Чтобы использовать свои сервисы, в ViewModel есть поле, содержащее абстракцию сервиса, например:
IService service;
Поскольку я использую Linq для запроса к базе данных, у меня есть сущности, имена которых совпадают с именамимои доменные имена.Чтобы ViewModel не знал о сущностях уровня обслуживания / базы данных, мне нужно, чтобы уровень обслуживания возвращал модель домена вместо созданной Linq сущности базы данных.Я делаю это, выполняя следующее (пример чего-то, над чем я работаю на работе):
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);
}
}
Есть пара вещей, в которых я недоволен / не уверен:
- Это хороший способ структурирования в сочетании с MVVM?
- Я вынужден использовать Models.ItemType, чтобы отличать его от ItemType, поступающего из базы данных.Это неизбежно?
- Я возвращаю ObservableCollection - может быть, что-то еще было бы лучше вернуть, а затем где-нибудь сделать то, что я возвратил ObservableCollection?
- В общем, что может бытьулучшилось или что может быть ошибочным суждением, которое вы видите, я сделал?
Спасибо: -)