我將在現有的MVVM WPF應用程序中引入視圖狀態功能。目標是能夠保存並加載(恢復)控件的特定狀態。通過添加視圖狀態功能來修改現有MVVM基礎結構
這個問題更多的是關於系統靈活性/維護性方面的設計和最佳解決方案。
目前的基礎設施:
public abstract class ViewModelBase
{
protected ViewModelBase(...)
{
}
}
// and few more very the same ViewModel classes for different control types
public sealed class GridViewModel : ViewModelBase
{
protected GridViewModel(...)
: base(...)
{
}
}
我介紹IViewState interface
所以每一個具體的視圖模型可以提供自己的實現像GridViewState class
並打算把它在視圖模型基礎設施方式如下:(想法是通過類型ViewState中作爲泛型參數)
public abstract class ViewModelBase<TViewState>
where TViewState : class, IViewState
{
protected ViewModelBase(...)
{
}
public TViewState ViewState { ... }
}
- 這是個好主意附上查看小號tate功能到ViewModel?
- 這是一個很好的解決方案,通過像
class GridViewModel<GridViewState>
這樣的泛型類型參數在特定的ViewModel typa和ViewState之間引入綁定關係嗎? - 哪裏和爲什麼最好定義像
LoadState()/SaveState(),
IViewState
本身或ViewModelBase
這樣的方法? - 還有其他的設計方案嗎?
對我來說看起來很合理。 –
1和2看起來是合理的 3. LoadState()和SaveState()更接近於IViewState,但是爲了可擴展性和可維護性,提供了一個持久化接口來解析存儲到,這允許實現多個持久性具體實現(例如數據庫,xml,文件,ws,...) –
關於加載/保存狀態我通過創建封裝ViewState +兩種方法的IViewStateAware將它與狀態本身解耦。 –
sll