2010-08-31 94 views
6

隨着我進一步深入研究MVVM和MVVM-light,我認識到,沒有MVVM-light爲模型提供基類。我的模型應該如何?

但是從我的理解來看,消息傳遞和提高通知也可能發生在模型中。至少在模型之間的溝通中,我會發現消息傳遞會非常方便。

因此,我只是決定從ViewModelBase派生我的模型,即使一些屬性(如設計時間的)將不被使用。

但我越是看着這個,我越覺得我錯過了什麼。從ViewModelBase派生我的模型是否被認爲是「不好的做法」?

可以使用Messaging進行模型通信嗎?

回答

9

從你喜歡的任何類型派生你的視圖模型類... MVVM-light提供了VieWModelBase來提供ICleanUp的實現 - 這對於管理ViewModel對象的生命週期是很好的。我自己的選擇是在基類中實現屬性更改通知的所有腳手架,然後從模型類派生。關於唯一的強建議我有一個關於模型類有:

  1. 一旦大小不適合所有。如何存儲數據可能與數據交互方式不同,ViewModel對象應該支持交互而不是存儲,並且如果您需要以兩種完全不同的方式與相同的數據(Model)進行交互,那麼設計兩個不同的ViewModel來支持這些不同的交互。
  2. 使用屬性(一個System.ComponentModel)來註釋模型。您可以通過這種方式獲得大量驗證工作 - 並且驗證反饋是表示層(View + ViewModel)的責任,而不是問題域(即模型)。

真正好的視圖模型類也通常無狀態,以至於它們可以被回收/單一用戶交互內重複使用,使得大的數據的列表可以被虛擬化(WPF支持虛擬化),以節省RAM。 (不要重複自己),KISS(保持簡單,愚蠢!)和YAGNI(你不會需要它) - 是你應該記住的原則以上任何學術設計原則。我已經浪費了數週時間在一個WPF應用程序上實現了學術上完美的MVC/MVVM模式,結果卻發現它們減損了完成解決方案的整體可理解性。所以......保持簡單! :)

+0

雖然這是一個非常好的答案,但它並不完全符合我的問題。我的考慮主要是關於模型溝通和模型的最佳實踐。 – 2010-08-31 13:47:27

+1

「我已經無情地浪費了一週時間在WPF應用程序上實現了學術上完美的MVC/MVVM模式,只是發現它們減損了完成解決方案的總體可理解性。」這正是我在使用MVVM學習曲線時所處的位置 - 這種認識。我想知道,請您詳細說明第2點。也許你做了什麼以及它對你有什麼幫助的例子? – bufferz 2010-08-31 15:48:44

2

我會看看Composite Application Library中的EventAggregator。在this的帖子中有個很好的描述。傑里米米勒的post進一步細節。

+0

這是否意味着我必須放棄MVVM光並去棱鏡?我還沒有決定100%的MVVM框架,所以切換是可能的。 – 2010-08-31 13:12:26

+0

由你決定,你當然可以下載代碼(棱鏡)並檢查出來。如果你想去其他的路線,那麼你可以參加你需要的課程。 IMO,我會使用複合應用程序庫並使用MVVM模型。 – SwDevMan81 2010-08-31 13:18:09

相關問題