viewModel vs model谁有责任与业务层进行通信?

时间:2010-02-16 20:57:49

标签: mvvm

wpf和MVVM的新手。我对什么属于什么感到困惑。

假设我们有一个带有btnSave的视图。

保存谁负责调用业务层?

我的理解是Model只是持有属性而没有方法 ViewModel实际上实现了EG“DelegateCommand SaveCommand,因此调用了业务层。 但是我被告知,实际上模型的责任是调用业务层。

来自msdn的josh smith的例子

从那里提取

      public ICommand SaveCommand
        {
        get
        {
            if (_saveCommand == null)
            {
                _saveCommand = new RelayCommand(param => Save(),param => CanSave);
            }
            return _saveCommand;
        }
    }

    /// <summary>
    /// Saves the customer to the repository.  This method is invoked by the SaveCommand.
    /// </summary>
    private void Save()
    {
        if (!_customer.IsValid)
            throw new InvalidOperationException(Strings.CustomerViewModel_Exception_CannotSave);

        if (this.IsNewCustomer)
            _customerRepository.AddCustomer(_customer);

        base.OnPropertyChanged("DisplayName");
    }

非常感谢您的观点。

3 个答案:

答案 0 :(得分:3)

该模型通常被视为业务层(如果不是整个业务层)的一部分。因此,ViewModel应该调用Model(业务层)中的方法。

答案 1 :(得分:0)

视图通常绑定到ViewModel中的属性。 ViewModel与业务层一起工作(执行CRUD)。可以在这里找到一篇优秀的文章 - http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

答案 2 :(得分:0)

MVVM是一种用于组织表示层的模式。您的应用程序如何持久保存其数据是一个不同的设计决策。

如果模型对象充满了将其映射到数据库表的SQL语句,那可能不是很好。但是如果这些语句位于存储库中并且模型知道存储库,则这是一个很好的决定。

或者您可以决定使模型独立于存储库,并使模型数据的检索成为ViewModel的责任。对于小型号,这可能更清洁。对于较大的模型,ViewModel在调用域对象上的业务方法之前要知道要检索多少对象可能会变得棘手。