我正在使用MVVM模式的WPF項目,我想知道是否可以通過將其公開的屬性抽象爲單獨的類來改進ViewModel的內部結構。將視圖模型屬性分組到不同的類別是一種好的做法嗎?
虛擬機通常包含許多圍繞在同一個類中的屬性:一些用於檢索用戶輸入,一些用於顯示命令,其他用於顯示模型,還有一些用於顯示視圖的其他屬性模型自己的業務邏輯。更不用說這些屬性經常設置並獲得增加一些批量的機構。這會在虛擬機課堂中迅速變得混亂,並且找到自己的方式會變得具有挑戰性。
作爲解決此問題的一種方法,我正在與我的團隊一起探索將虛擬機中的屬性分組到不同的類別。作爲第一種方法,我選擇了他們組是這樣的:
的ViewData,UserInputs和命令,每一個通過自己的類來表示。然後我將它們作爲我的VM類中的屬性引用。
我的意圖是,這些類只能充當佔位符,以釋放虛擬機中的膨脹並保持整潔,並只專注於交互邏輯來處理用戶事件。
這是一個簡單的重構,但我得到了以下優點:
- 清潔和可讀性VM。
- 從XAML更容易綁定,因爲您知道入口點是/應該是什麼。
讓我詳細說明後者:如果我想將文本框綁定到虛擬機的屬性,我知道綁定表達式應以Userinput.MyVMProperty
開頭。如果我需要顯示虛擬機的價值,我知道我的綁定的入口點將是ViewData.MyOtherVMProperty
。綁定intellisense也會變得更好,因爲當你知道你的入口點時, 建議列表將變得更小和更集中。這也可以用另一種方式:在讀取XAML控件時,任何以UserInput開始的綁定必然意味着它應該是一個應該將數據發回VM的控件。
唯一的缺點是我可以找到的是,這將需要爲每個虛擬機創建額外的類,但我相信這是一個公平的價格來支付您獲得的好處。
請注意,我建議的分組可能不是最好的,但我不介意任何其他分組,只要它解決了大型虛擬機的問題。
那麼,有沒有人嘗試過類似的模式?你認爲這是一個好主意/練習嗎?我可以使用哪些其他良好實踐來改進我的虛擬機?獎金問題:我的團隊中似乎同意這個想法的一位開發人員,建議我們多加努力,將分組的類視爲虛擬機依賴關係,並且他們需要注入虛擬機內部。你怎麼看待這件事?
有趣的是,你有一個問題 - 你將如何處理既屬於UserInput又屬於ViewData的屬性?假設有一個文本框應該顯示用戶的名稱 - 它可以被編輯以及查看,並且您的視圖在兩種情況下都顯示文本框中的用戶名。所以在這種情況下'UserName'可以同時被處理 - 作爲'UserInput' bcuz它可以被改變並且'ViewData' bcuz你使用這個屬性在窗體上顯示用戶名。那麼你將如何處理這種情況? – Michael
@Michael:我可以建立的一個規則是ViewData應該只包含僅用於顯示的屬性。從視圖到虛擬機的任何其他內容都可以視爲UserInput,即使它也用於顯示。我開放給其他種類的分組,例如將UserInputs和ViewData分組在同一組中。 – disklosr