2013-07-10 63 views
1

我有類似的問題THIS爲什麼要避免MVVM中的事件?

爲什麼在什麼情況下應該避免事件(和命令是首選)在開發WPF應用程序?我想要一個實用的例子,事件的方式變得太難以遵循/維護(這是我的主要興趣)。

+0

這與您所引用的問題有何不同?事件只是代碼背後 - 這些確切的原因適用。 –

+0

我想要一個例子 –

+0

它不是很難或難以在後面的代碼中維護。 MVVM的主要用途是將UI與業務邏輯完全分離,所以如果事件中有一些BL需要執行,那麼可以繼續使用Commands進行事件。例如,考慮到事件發生時你正在改變'任何控件的背景顏色',那麼你可以在代碼後面的代碼中做到這一點,因爲它沒有太多的商業邏輯(你仍然可以通過Command實現)。這也取決於你是否真的想單元測試這種情況,然後去命令,否則去代碼後面。 – srsyogesh

回答

3

事件實現了發佈者和訂閱者之間的緊密耦合,格式嚴格且難以擴展。最令人沮喪的是,發行商不知道其訂閱者是誰,因此即使所有訂閱者都去了,也會繼續發佈。這導致內存泄漏。此外,如果ViewModel在其中有處理程序來偵聽源自用戶表面的事件,則必須以某種方式人爲創建這些事件以在ViewModel上運行受控測試。根據你的問題,這可能很難做到。

另一方面,命令僅在ViewModel處於可預測狀態並且返回到CanExecute查詢時執行。當CanExecute查詢返回true時,可以執行該命令,並且可以精確全面地觀察其突變。

實際上,當開發人員啓動應用程序並尋找給定條件時,會有一個ViewModel中有大量的處理程序被測試;每個人都睡着的時候,凌晨2點可以測試使用命令模式的ViewModel。

您的示例...用戶故事:當我雙擊列表框中的某個項目,然後在5秒內單擊「確定」時,應該生成對數據庫的查詢。但是,只有在星期二,只有在曼谷下雨的時候。

事件模型:難以編程,不可能全面測試(除非是星期二:)),不可能縮放,重複錯誤之後,用戶對工作的信心不足。命令模型:編程簡單,測試簡單,在每次更改要求後都可以驗證100%的測試覆蓋率。