【发布时间】:2010-10-21 12:01:11
【问题描述】:
我是第一次尝试使用 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 的主要原因之一是能够在没有主机应用程序的情况下测试模型。具体来说,我有兴趣深入了解集中式应用设置如何影响可测试性以及模拟依赖模型的能力。
【问题讨论】:
标签: c# .net wpf unit-testing mvvm