2011-06-24 38 views
5

Model-View-ViewModel(MVVM)方法似乎是WPF UI開發中的領跑者模式。幾乎我讀過的每篇文章都暗示這是最佳做法。 RelayCommand或DelegateCommand的用法在許多文章中也很突出,似乎不使用任何一種(或任何其他變體)來實現MVVM幾乎是不可能的。那麼爲什麼他們不是.NET 4的一部分呢?爲什麼RelayCommand或DelegateCommand不是WPF的一部分?

我知道RelayCommand的實現起來非常簡單,許多第三方工具包已經擁有它,但我只是想知道爲什麼微軟會拋棄一些如此基本和基本的東西來實施所謂的「最佳實踐「?

回答

0

我個人對此的看法是RelayCommands打破了MVVM的意圖。

在我看來,爲每個目的實現一個命令比使用RelayCommands更「最佳實踐」,因爲每個類都服務於「單一責任」。一個命令應該封裝它本身的行爲,而不是委託給視圖模型。

調試繼電器命令不那麼直截了當,當你必須經歷如此之多的功能/動作/委託以及從一個對象跳轉到另一個對象時,真正的痛苦。

+0

我真的沒有看到他們違反了MVVM所做的任何承諾。 MVVM最終都是關於解耦的,例如從視圖和它背後的邏輯,而這些命令實現了完美。無可否認,SRP是最重要的原則之一,但您必須小心放置R的位置。對於我來說,RelayCommand的響應性是提供一種執行某種事件的方式來響應事件,並且我喜歡將虛擬機本身就有一些東西,所以命令只有一個依賴關係(虛擬機)。否則,該命令可能會依賴於引入更緊密耦合的一個或多個對象。 – stijn

+0

......但這一切都取決於確切的情況。我也有很多不依賴於虛擬機的RelayCommands,但只是將一個事件發佈到EventAggregator左右。在這種情況下,將請求轉發給虛擬機將是瘋狂的。 – stijn

2

由於Microsoft負責WPF,而不是MVVM。

如果你想包含要獲得良好的MVVM應用程序的所有組件的完整的工具包,我建議你看一看棱鏡:A good tutorial here

的根本原因是,微軟的重點是「主流」 WPF功能(如增強控件和綁定)。如果我是正確的,MVVM就是由MVVM基金會「監督」的。

+1

如果你的意思是[this](http://mvvmfoundation.codeplex.com/),那麼這只是一個庫,而不是一羣試圖維護/監督MVVM模式的人。 – CodeNaked

1

與大多數情況下,它歸結爲金錢。它可能是一個簡單的類,但在.NET中包含它需要很多工作。單個類必須是:

  1. 完全測試之前發佈。迴歸測試也必須針對未來版本實施。
  2. 完整記錄在幾種語言,這也必須驗證。
  3. 它將不得不重新命名,因爲使用RelayCommand或DelegateCommand很可能會破壞那些已經有這些類的WPF,因爲會有命名衝突。

這些都需要比你期望的更多的工作(即#2將有第一次草稿,修訂,最終批准等)。

找到相關鏈接here

相關問題