Mvvm viewModel vs model谁有责任与业务层沟通?

Mvvm viewModel vs model谁有责任与业务层沟通?,mvvm,Mvvm,刚接触wpf和MVVM。我有点困惑什么属于什么 假设我们有一个带有btnSave的视图 保存时,谁负责呼叫业务层 我的理解是,模型只包含属性,没有方法 ViewModel实际上正在实现例如“DelegateCommand SaveCommand”,因此调用业务层。 然而,有人告诉我,调用业务层实际上是模型的责任 摘自josh smith关于msdn的示例 从那里提取 public ICommand SaveCommand { get {

刚接触wpf和MVVM。我有点困惑什么属于什么

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

保存时,谁负责呼叫业务层

我的理解是,模型只包含属性,没有方法 ViewModel实际上正在实现例如“DelegateCommand SaveCommand”,因此调用业务层。 然而,有人告诉我,调用业务层实际上是模型的责任

摘自josh smith关于msdn的示例

从那里提取

      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");
    }
public ICommand SaveCommand
{
得到
{
如果(_saveCommand==null)
{
_saveCommand=newrelaycommand(param=>Save(),param=>CanSave);
}
返回_saveCommand;
}
}
/// 
///将客户保存到存储库。此方法由SaveCommand调用。
/// 
私有void Save()
{
如果(!\u customer.IsValid)
抛出新的InvalidOperationException(Strings.CustomServiceWModel\u异常\u无法保存);
if(this.IsNewCustomer)
_customerRepository.AddCustomer(_customer);
base.OnPropertyChanged(“DisplayName”);
}

您的视图非常受欢迎。

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

视图通常绑定到ViewModel中的属性。ViewModel工作(CRUD工作)关于业务层。在这里可以找到一篇优秀的文章-

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

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


或者,您可以决定使模型独立于存储库,并让ViewModel负责检索模型数据。对于小型模型,这可能更干净。对于大型模型,在调用域对象上的业务方法之前,ViewModel可能需要知道要检索多少对象。

el实现了SaveCommand,但实际上调用了Model.Save.mmmmm,但是msdn上的josh Smith示例却做了相反的事情!!!因为他从ViewModel而不是从模型中调用CustomerRepository。看上面的帖子,我在那里添加了代码,因为无法将其添加到ViewModel中(CRUD是否起作用)关于业务层。在这里可以找到一篇优秀的文章-这就是我感到困惑的原因!!这与我所说的并不矛盾。ViewModel访问模型中的方法和属性。在本例中,您所指的业务层只是模型的另一个名称。嗨,首先感谢您的回复。在Jos中h Smith在msdn中的例子他没有使用该模型来调用customerRepository,但viewModel调用customerRepository。我在谷歌上搜索了更多,我发现有些人说一件事,而另一些人说相反的话。这不是我所看到的一刀切。我希望是这样,这就是为什么我在这个论坛上放了一个uqestionh。还有什么建议吗?嗨,所以你说的和我想的一样,但是上面的Electricalytoal和Reed Coopsey的想法正好相反。我是wpf的新手,很困惑!!!嗨。是的,术语可能会让人困惑。参考文章有助于澄清这一点-mvvm是模型视图演示器的一个扩展,它是模型视图控制器的一个变体。模型就是数据。我s在MVVM、MVP、MVC中是一致的。视图尽可能愚蠢。同样,这是一致的。控制器是MVC的核心。它将视图与模型联系起来。当用户与视图交互时,控制器接收消息。在MVP模式中,演示者类似于控制器。在MVVM中,视图模型不需要与MVP不同,d是对视图的引用。