1
A
回答
3
事件實現了發佈者和訂閱者之間的緊密耦合,格式嚴格且難以擴展。最令人沮喪的是,發行商不知道其訂閱者是誰,因此即使所有訂閱者都去了,也會繼續發佈。這導致內存泄漏。此外,如果ViewModel在其中有處理程序來偵聽源自用戶表面的事件,則必須以某種方式人爲創建這些事件以在ViewModel上運行受控測試。根據你的問題,這可能很難做到。
另一方面,命令僅在ViewModel處於可預測狀態並且返回到CanExecute查詢時執行。當CanExecute查詢返回true時,可以執行該命令,並且可以精確全面地觀察其突變。
實際上,當開發人員啓動應用程序並尋找給定條件時,會有一個ViewModel中有大量的處理程序被測試;每個人都睡着的時候,凌晨2點可以測試使用命令模式的ViewModel。
您的示例...用戶故事:當我雙擊列表框中的某個項目,然後在5秒內單擊「確定」時,應該生成對數據庫的查詢。但是,只有在星期二,只有在曼谷下雨的時候。
事件模型:難以編程,不可能全面測試(除非是星期二:)),不可能縮放,重複錯誤之後,用戶對工作的信心不足。命令模型:編程簡單,測試簡單,在每次更改要求後都可以驗證100%的測試覆蓋率。
相關問題
- 1. 爲什麼要避免Application.Worksheetfunction?
- 2. 爲什麼要逃避和避免XSS
- 3. 爲什麼要在SQL中避免SELECT *?
- 4. 爲什麼需要避免complexType?
- 5. 爲什麼要避免單元測試中的條件邏輯?
- 6. 爲什麼要避免CDO在.NET中發送郵件?
- 7. 什麼是鍋爐板碼?爲什麼要避免它?
- 8. 爲什麼要避免Java中的C++關鍵字?
- 9. 爲什麼要避免Java中的biginteger實例化
- 10. 爲什麼要避免在java中使用Runtime.exec()?
- 11. 爲什麼要在HRESULT處理中避免宏?
- 12. 爲什麼要避免使用多字節流在Java中
- 13. 避免FullCalendar中的事件疊加
- 14. 爲什麼延續避免stackoverflow?
- 15. 爲什麼建議避免使用.innerHTML?
- 16. 爲什麼要避免使用「是」和「不是」?
- 17. 當創建ILE RPG程序爲什麼要默認避免
- 18. 爲什麼要避免頁內<script>
- 19. 爲什麼要避免後新檢查NULL按照ISO C++
- 20. SQLServer:爲什麼要避免表值用戶定義函數?
- 21. 爲什麼要避免使用i,j in for循環
- 22. 爲什麼我需要parseInt()來避免NaN?
- 23. 避免回發GridView事件
- 24. 避免寫什麼到文件
- 25. 我爲什麼要使用MVVM?
- 26. 爲什麼要從Unity委託事件中刪除事件?
- 27. 在ontextchange事件中避免回傳
- 28. 爲什麼我們要避免編程中的Magic Numbers或Constants並使用宏?
- 29. 爲什麼要實施productClick事件?
- 30. 爲什麼我要刪除child_added事件?
這與您所引用的問題有何不同?事件只是代碼背後 - 這些確切的原因適用。 –
我想要一個例子 –
它不是很難或難以在後面的代碼中維護。 MVVM的主要用途是將UI與業務邏輯完全分離,所以如果事件中有一些BL需要執行,那麼可以繼續使用Commands進行事件。例如,考慮到事件發生時你正在改變'任何控件的背景顏色',那麼你可以在代碼後面的代碼中做到這一點,因爲它沒有太多的商業邏輯(你仍然可以通過Command實現)。這也取決於你是否真的想單元測試這種情況,然後去命令,否則去代碼後面。 – srsyogesh