我想了解此刻的Model-View-Presenter模式。比方說,我有一個用戶界面(視圖),並有一些控制。我想讓用戶選擇保存控件的狀態(例如,窗口大小,選定的選項卡,DataGridView列大小等)。使用MVP模式編寫用戶界面設置類
現在,如果我創建了一個「設置」模型,它將具有像「dgvColumnSize1」,「WindowsSize」等屬性。但是模型知道這個視圖,並且專門爲它設計。
我該怎麼做才能解耦它們?
我想了解此刻的Model-View-Presenter模式。比方說,我有一個用戶界面(視圖),並有一些控制。我想讓用戶選擇保存控件的狀態(例如,窗口大小,選定的選項卡,DataGridView列大小等)。使用MVP模式編寫用戶界面設置類
現在,如果我創建了一個「設置」模型,它將具有像「dgvColumnSize1」,「WindowsSize」等屬性。但是模型知道這個視圖,並且專門爲它設計。
我該怎麼做才能解耦它們?
這些屬性是從模型不直接耦合到特定視圖,而不是直接耦合到具有這些屬性的視圖中去耦合的......但我明白你的意思。
有兩種方法可以使用:
不透明狀態
的意見包裝自己的狀態到可以存儲在模型不透明狀態對象。 該視圖然後負責將其狀態從狀態對象打包並解包,並相應地進行更改。 可用於以不透明方式存儲屬性的對象示例包括字典,ExpandoObject和JSON/XML字符串。
MVP層次
架構模式的模型 - 視圖 - X系列可以在層次結構,其中一個底MV-X的視圖是在線的下一個的模型來設置。 在層次結構中通常需要兩個或三個鏈式MV-X:
可選的底層MVC充當DAL層,可選的中層MVC充當業務層和一組MVP,用於不同的用戶/應用程序的機器接口在最上面。
底層的MVC體系結構完全是表示層不可知的,而頂級MVP是針對表示層定製的。
頂級MVP如何通過表示層的狀態傳遞到底層以保持持久性,你問?爲什麼使用不透明的物體當然!
順便說一句,如果這個設置聽起來像微軟在WPF中使用的MVVM模式,那是因爲它。 MVVM只是MVP模式的輕微修改,如果它可以被稱爲不同的模式。
您的視圖實現的接口應該具有代表演示者可以讀取的這些數量的屬性。然後演示者可以讀取它們並將它們存儲在Settings對象中。
當Presenter啓動時,它可以獲取Settings對象,並將值複製回View中。