0

我正在开发 Windows Phone 7 应用程序,听说 MVVM 模式很有用。我在这个站点上阅读了很多文章和问题,但我得到的只是对视图模型作为视图和模型之间桥梁的解释。如果模型是客户类,那么视图模型被认为是客户的集合,用于数据绑定。这是一个非常简单的用法!

如果我想从网络加载客户,将其显示在视图上,然后将其存储到本地数据库,我应该将所有逻辑代码放在视图模型中吗?

4

2 回答 2

2

不,您不应该阅读有关关注点分离的信息。您只希望每个类更改一个原因,视图模型应该只负责翻译模型信息以显示在视图上。

一个单独的服务实现应该负责从您的数据存储中获取模型实例。

例如:

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 中可用的内容。

于 2012-11-26T12:57:04.840 回答
1

如果我想从网络加载客户,将其显示在视图上,然后将其存储到本地数据库,我应该将所有逻辑代码放在视图模型中吗?

如果“从网络加载客户”的逻辑特定于视图并且仅针对该视图,那么将其放入该 ViewModel 是有意义的。

如果客户的加载需要与其他视图共享,那么也许您应该将其放置在数据层中,该数据层在启动时或在后台加载。

ViewModel 应仅包含特定于该 View 的代码。如果应用程序在其他地方需要数据,它不应该包含任何“核心”功能,例如加载数据。

于 2012-11-26T12:54:03.963 回答