我正在开发Windows Phone 7应用程序,听说MVVM模式很有用。我在这个网站上阅读了许多文章和问题,但我得到的只是视图模型作为视图和模型之间的桥梁的解释。如果模型是 Customer 类,则视图模型被视为用于数据绑定的客户集合。这是一个非常简单的用法!
如果我想从网络加载客户,在视图上显示它,然后将其存储到本地数据库,我应该将所有逻辑代码放在视图模型中吗?
不,你不应该,阅读关注点分离。你只希望每个类更改一个原因,视图模型应该只负责翻译要在视图上显示的模型信息。
单独的服务实现应负责从数据存储中获取模型实例。
例如:
public class MyViewModel
{
private readonly ICustomerRetrieval _retrievalService;
public MyViewModel(ICustomerRetrieval retrievalService)
{
_retrievalService = retrievalService;
}
public IEnumerable<CustomerViewModel> Customers
{
get { return _retrievalService.GetAllCustomers().Select(AsViewModel);
}
private CustomerViewModel AsViewModel(CustomerModel cust)
{
return new CustomerViewModel(cust);
}
}
您可以看到服务负责查找客户模型,而视图模型仅负责将这些模型转换为可从 UI 使用的内容。
如果我想从网络加载客户,请在视图上显示它,然后 将其存储到本地数据库,我是否应该将所有逻辑代码放在 查看模型 ?
如果"从网络加载客户"的逻辑特定于视图,并且仅特定于该视图,则将其放入该视图模型中是有意义的。
如果需要与其他视图共享客户的加载,那么也许您应该将其放置在启动时或后台加载的数据层中。
视图模型应仅包含特定于该视图的代码。它不应包含任何"核心"功能,例如加载数据(如果应用程序在其他地方需要该数据)。