我正在开发Windows Phone 7应用程序,并听说MVVM模式很有用。我在这个网站上阅读了很多文章和问题,但我得到的只是将视图模型解释为视图和模型之间的桥梁。如果model是Customer类,则视图模型被认为是用于数据绑定的客户集合。这是一个非常简单的用法!
如果我想从网络加载客户,在视图上显示它,然后将其存储到本地数据库,我应该将所有逻辑代码放在视图模型中吗?
答案 0 :(得分:2)
不,你不应该,请阅读Separation of Concerns。您只希望每个类更改一个原因,视图模型应仅负责转换要在视图上显示的模型信息。
单独的服务实现应负责从数据存储中获取模型实例。
例如:
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中使用的内容。
答案 1 :(得分:1)
如果我想从网络加载客户,请在视图上显示,然后 将它存储到本地数据库,我应该将所有逻辑代码放在 查看模型?
如果“从网络加载客户”的逻辑特定于视图而且只是该视图,那么将它放入该ViewModel是有意义的。
如果客户的加载需要与其他视图共享,那么您可能应将其放在启动时或后台加载的数据层中。
ViewModel应该只包含特定于该View的代码。如果应用程序在其他地方需要该数据,它不应包含任何“核心”功能,如加载数据。