一千萬個為什麽

搜索

MVVM:瘦ViewModels和Rich Models

我將繼續努力克服MVVM模式,並且在嘗試為小型/中型項目創建實用設計時,遇到了許多挑戰。其中一個挑戰是弄清楚如何在不創建大量重復,難以維護的代碼的情況下獲得與此模式解耦的好處。

我目前的策略是創建“豐富”的模型類。他們充分意識到它們將被MVVM模式消耗並實現INotifyPropertyChanged,允許觀察它們的集合並且仍然認識到它們可能總是被觀察。我的ViewModel類往往很薄,只在實際需要轉換數據時公開屬性,其大部分代碼是RelayCommand處理程序。視圖可以直接綁定到ViewModel或Models,具體取決於是否需要進行任何數據轉換。我使用AOP(通過Postsharp)來緩解INotifyPropertyChanged的痛苦,這樣就可以很容易地以這種方式使我的所有Model類“豐富”。

使用這種方法有明顯的缺點嗎?我可以假設ViewModel和View是如此緊密耦合,如果我需要View的新數據轉換,我可以根據需要將其添加到ViewModel中嗎?

最佳答案

我認為你的模型上的INotifyPropertyChanged只有當你期望你的VM和外部“力”同時操作時才有用。

我個人是POCO模型的支持者。將任何特定於框架的腳手架放入我的模型中會讓我擔心。當您將一個事件放入模型類時,您必須仔細考慮模型的生命周期,序列化,存儲等可能存在的問題。例如,如果從數據源重新創建對象會發生什麽,而舊的INotifyPropertyChanged訂閱現在無效?

ObservableCollection類似地更好的位置在VM中,它可以使用IEnumerable數據源,並且僅向視圖呈現選定或臨時過濾的項目。

轉載註明原文: MVVM:瘦ViewModels和Rich Models