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