我正在構建一個MVVM應用程序。我試圖構建我的應用程序是這樣的:MVVM和分層,實現服務層
我不知道這種方法在MVVM是常見的。無論如何,ViewModel使用服務層來填充它正在包裝的Model或ObservableCollection。爲了讓使用其服務的,視圖模型具有保持服務的抽象,像這樣一個領域:
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?
- 就在一般情況下,有什麼可以改進的,或者可能是您看到我做出的判斷錯誤?
感謝:-)
是啊,我知道了L2SQL。關於實體和域模型,你是否說我可以放棄擁有域模型?在很多關於MVVM的例子中,我看到人們有一個他們返回的模型,像這樣:'foreach(this.db.Person中的Person人){this.persons.Add(new PersonViewModel(person));',其中Person是一個領域模型,而不是一個實體。人域模型就像他們說的貧血一樣。爲什麼會有一個域模型,如果它們與實體相同? – TheDude 2011-04-03 09:39:17
這正是我所說的。至於爲什麼他們不需要複製對象 - 問問他們! ;) – 2011-04-03 11:59:45