2016-12-28 67 views
1

在MVVM模式中,在WPF應用程序的上下文中將我的領域模型用作模型是否可行?還是模型(在MVVM中)應該是一些POCO?我個人認爲沒有任何理由反對使用域模型作爲MVVM WPF模式的模型。MVVM中的模型是域模型還是POCO?

但是那麼XAML元素會綁定什麼?虛擬機中的屬性映射到域模型,對嗎?

回答

2

要回答標題中提出的問題:既不。

在MVVM中,「模型」通常是視圖模型另一側(即視圖模型和存儲庫之間)的所有內容。該模型可以(並且通常)由幾種不同的附加體系結構和模式組成,在「模型」中有服務,微服務,DAL和DIL,領域模型,POCO /數據實體等是正常的。

你說話的域對象和波蘇斯不模型,它們的部分模型。您所談論的模型的觀點已經從其他模式(如MVC)中引入,其中數據實體或域對象確實是模型。該模型比MVVM中的模型稍微複雜一些。

您可以直接綁定到MVVM中的POCO,但它通常不是一個好主意,除非它是非常簡單的一個不會更改(如源自存儲庫的查找列表)。綁定到域對象通常是一個壞主意,因爲它們將包含與存儲和檢索相關的額外功能或信息,但對UI中顯示的任何內容都是過度的。域對象的另一個問題是它們通常不會很好地序列化(如果有的話 - 通常會生成域對象),所以除非您有一個非常簡單的模型,否則最好儘快將域對象轉換爲POCO。

因此,如answer from Owen中所述,您應該先將視點模型類包裝到POCO中,然後才能將它們提供給UI。唯一不應該在的時候不需要任何屬性更改通知,而且您也不希望利用對象上的任何其他功能(例如,在顯示的項目上不需要上下文菜單)。

-1

是,只要你的域模型實現INotifyPropertyChanged,你可以使用和VM性能

+1

但就是這樣 - DM永遠不會執行'inotifypropertychanged'。因此,說VM *包裝(域)模型是更正確的,是的? –

+0

如果使用實體框架,由它爲DM創建的Poco實現inotify。即使VM包裝DM,DM的基礎屬性也應實現inotify – Krishna

1

但隨後的XAML元素將綁定到什麼綁定XAML?虛擬機中的屬性映射到域模型,對嗎?

是的,你可以參考你的POCO模型實體類的WPF應用程序,並實現了INotifyPropertyChanged接口,提供動態變化的通知的支持視圖模型類包裝他們。這很好。

有關詳細信息,請參閱我對以下問題的回答。

Correct way to update property in ViewModel from Model

2

您可能會想包裝與視圖模型的領域模型對象。您的視圖模型的目的是以對視圖有用的方式顯示模型中的數據。對於非常簡單的應用程序來說,爲改變通知添加額外的層似乎很麻煩,但隨着應用程序變得更加複雜,讓視圖模型層綁定可以幫助保持模型清潔。如果你正在做一些快速和骯髒的事情,沒有什麼能阻止你直接綁定到你的領域模型對象。