2010-02-16 24 views
1

新的wpf和MVVM。我有點困惑什麼屬於什麼。viewModel vs model負責與業務層進行通信?

讓我們假設我們有一個btnSave的視圖。

保存誰負責調用業務層?

我的理解是,模型只是持有型物業,並沒有方法 視圖模型實際上是實現EG「DelegateCommand SaveCommand,因此調用業務層。 不過,我已被告知,實際上是模型調用業務層的責任。

例如從約什 - 史密斯採取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"); 
    } 

你的意見很睦h讚賞。

回答

0

該視圖通常會綁定到ViewModel中的屬性。 ViewModel與業務層一起工作(執行CRUD)。一篇優秀的文章可以在這裏找到 - http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

+0

嗨, 所以你說我在想什麼,但上面的ElectricDialect和Reed Coopsey認爲是相反的。 我是wpf的新手,感到困惑! – user9969

+0

嗨。是的,這個術語可能會讓人困惑。引用的文章有助於解決這個問題--mvvm是Model-View-Presenter的擴展,它是Model-View-Controller的變體。該模型是數據。這在MVVM,MVP,MVC中是一致的。視圖儘可能愚蠢。這又是一致的。 Controller是MVC的核心。它將觀點與模型聯繫在一起。控制器在用戶與視圖交互時接收消息。在MVP模式中,Presenter類似於Controller。在MVVM中,與MVP不同,ViewModel不需要對視圖的引用。 – soulia

3

該模型通常被認爲是整個業務層的一部分。所以,ViewModel應該調用模型(業務層)中的方法。

+0

正是我要說的。 –

+0

所以,ViewModel實現了SaveCommand,但實際上調用Model.Save .mmmmm 但是,然後MSDN上的josh Smith示例做了相反的事情! 當他從ViewModel中調用CustomerRepository而不是從模型中查找。在上面的帖子中,我添加了代碼,因爲無法在此處添加代碼 – user9969

+0

ViewModel與Business Layer一起工作(執行CRUD)。一篇優秀的文章可以在這裏找到 - http://msdn.microsoft.com/en-us/magazine/dd419663.aspx 這就是爲什麼我很困惑! – user9969

0

MVVM是一種用於組織您的表示層的模式。您的應用程序如何保持其數據是一個不同的設計決策。

如果模型對象充滿了將其映射到數據庫表的SQL語句,它可能不是很好。但是,如果這些語句位於存儲庫中並且模型知道存儲庫,那麼這是一個很好的決定。

或者您可以決定使模型獨立於存儲庫並檢索模型數據是ViewModel的責任。對於小型號,這可能更乾淨。對於較大的模型,ViewModel在調用域對象上的業務方法之前知道要檢索多少個對象可能會比較棘手。