我瞭解MVVM在大型團隊長時間開發收縮包裝應用程序的上下文中的實用性。但是在內部LOB應用程序的上下文中,MVVM看起來有點矯枉過正,而且我無法吞噬調試數據綁定的開銷,從一層一層跳到另一層,以及使用一兩個命令提取幾乎不超過模型的虛擬機。即使接受這種開銷,仍然留下了MVVM中像對話框一樣的空洞。有幾件事情我已經考慮是:適用於WPF的輕量級視圖模型
- 直接綁定到模型,並且爲形式的互動
- 老派的事件處理程序綁定用戶控件或窗口本身,有效利用後面的代碼爲VM 。
- 在我的VM中包含一個屬性以引用相關視圖。
- 製作視圖的ViewModel的子類。
上述項目及其組合解決了一些問題,但不是全部。我意識到我可能會犧牲可測性。我還會遇到哪些其他技術(不是概念上的SOC)問題?
雖然有像您在使用MVVM時得到的,記住,MVVM是關注和代碼複用分離的好處主要是關於能夠獨立於實際視圖測試您的業務邏輯。如果您的應用程序的單元測試對項目很重要,那麼MVVM是一個不錯的選擇,可能值得相關的「開銷」。 – Oppositional
我不同意。視圖模型不應該有業務邏輯,它們包含與ui相關的邏輯。我們的業務邏輯/模型層已經過單元測試。但是與在典型的收縮包裝或商業產品中發佈相關的成本幾乎不存在於內部LOB應用程序中,因此我們認爲單元測試UI幾乎沒有意義,這使我們在這個地方也想知道MVVM的有用性最純粹的形式。 –
我不同意,ViewModels絕不應該包含UI邏輯。任何與UI相關的內容(例如設置焦點或運行動畫)都應在後面的代碼中完成。 ViewModels應該包含業務邏輯,例如加載/保存數據,並且它們應該控制應用程序流程,例如更改ViewModel是當前活動屏幕還是返回錯誤消息。您的ViewModel是您的應用程序,而Views只是一個非常漂亮的UI,可以讓用戶輕鬆地與ViewModel進行交互。 – Rachel