隨着我進一步深入研究MVVM和MVVM-light,我認識到,沒有MVVM-light爲模型提供基類。我的模型應該如何?
但是從我的理解來看,消息傳遞和提高通知也可能發生在模型中。至少在模型之間的溝通中,我會發現消息傳遞會非常方便。
因此,我只是決定從ViewModelBase派生我的模型,即使一些屬性(如設計時間的)將不被使用。
但我越是看着這個,我越覺得我錯過了什麼。從ViewModelBase派生我的模型是否被認爲是「不好的做法」?
可以使用Messaging進行模型通信嗎?
隨着我進一步深入研究MVVM和MVVM-light,我認識到,沒有MVVM-light爲模型提供基類。我的模型應該如何?
但是從我的理解來看,消息傳遞和提高通知也可能發生在模型中。至少在模型之間的溝通中,我會發現消息傳遞會非常方便。
因此,我只是決定從ViewModelBase派生我的模型,即使一些屬性(如設計時間的)將不被使用。
但我越是看着這個,我越覺得我錯過了什麼。從ViewModelBase派生我的模型是否被認爲是「不好的做法」?
可以使用Messaging進行模型通信嗎?
從你喜歡的任何類型派生你的視圖模型類... MVVM-light提供了VieWModelBase來提供ICleanUp的實現 - 這對於管理ViewModel對象的生命週期是很好的。我自己的選擇是在基類中實現屬性更改通知的所有腳手架,然後從模型類派生。關於唯一的強建議我有一個關於模型類有:
真正好的視圖模型類也通常無狀態,以至於它們可以被回收/單一用戶交互內重複使用,使得大的數據的列表可以被虛擬化(WPF支持虛擬化),以節省RAM。 (不要重複自己),KISS(保持簡單,愚蠢!)和YAGNI(你不會需要它) - 是你應該記住的原則以上任何學術設計原則。我已經浪費了數週時間在一個WPF應用程序上實現了學術上完美的MVC/MVVM模式,結果卻發現它們減損了完成解決方案的整體可理解性。所以......保持簡單! :)
我會看看Composite Application Library中的EventAggregator
。在this的帖子中有個很好的描述。傑里米米勒的post進一步細節。
這是否意味着我必須放棄MVVM光並去棱鏡?我還沒有決定100%的MVVM框架,所以切換是可能的。 – 2010-08-31 13:12:26
由你決定,你當然可以下載代碼(棱鏡)並檢查出來。如果你想去其他的路線,那麼你可以參加你需要的課程。 IMO,我會使用複合應用程序庫並使用MVVM模型。 – SwDevMan81 2010-08-31 13:18:09
雖然這是一個非常好的答案,但它並不完全符合我的問題。我的考慮主要是關於模型溝通和模型的最佳實踐。 – 2010-08-31 13:47:27
「我已經無情地浪費了一週時間在WPF應用程序上實現了學術上完美的MVC/MVVM模式,只是發現它們減損了完成解決方案的總體可理解性。」這正是我在使用MVVM學習曲線時所處的位置 - 這種認識。我想知道,請您詳細說明第2點。也許你做了什麼以及它對你有什麼幫助的例子? – bufferz 2010-08-31 15:48:44