我正在第一次嘗試MVVM,並且非常喜歡分離職責。當然,任何設計模式都只能解決許多問題 - 並非全部。所以我試圖找出存儲應用程序狀態的位置以及存儲應用程序範圍命令的位置。在MVVM應用程序中存儲應用程序設置/狀態的地方
比方說我的應用程序連接到一個特定的URL。我有一個ConnectionWindow和一個ConnectionViewModel,支持從用戶收集這些信息並調用命令來連接到該地址。下一次應用程序啓動時,我想在不提示用戶的情況下重新連接到該地址。
我到目前爲止的解決方案是創建一個ApplicationViewModel,它提供了一個連接到特定地址的命令,並將該地址保存到某個持久性存儲器(實際保存的地址與此問題無關)。下面是一個縮寫的類模型。
應用視圖模型:
public class ApplicationViewModel : INotifyPropertyChanged
{
public Uri Address{ get; set; }
public void ConnectTo(Uri address)
{
// Connect to the address
// Save the addres in persistent storage for later re-use
Address = address;
}
...
}
連接視圖模型:
public class ConnectionViewModel : INotifyPropertyChanged
{
private ApplicationViewModel _appModel;
public ConnectionViewModel(ApplicationViewModel model)
{
_appModel = model;
}
public ICommand ConnectCmd
{
get
{
if(_connectCmd == null)
{
_connectCmd = new LambdaCommand(
p => _appModel.ConnectTo(Address),
p => Address != null
);
}
return _connectCmd;
}
}
public Uri Address{ get; set; }
...
}
所以,問題是這樣的:是的ApplicationViewModel來處理這個正確的方式?你還可以存儲應用程序狀態嗎?
編輯:我也想知道這是如何影響可測試性的。使用MVVM的主要原因之一是無需主機應用程序即可測試模型。具體而言,我對如何集中應用程序設置影響可測試性以及嘲笑依賴模型的能力有所瞭解。
我已經在過去的幾天中傾注了Onyx代碼來收集WPF的一些見解。這絕對是我思考的方式,我學到了很多東西。 – 2009-04-28 23:26:30