2011-04-19 134 views
2

我試圖去掌握不同的模式(MVP,MVVM等),並找到一個適合我的需求。畢竟我還沒有確定。希望有人能爲我闡明這一點。模型,視圖,視圖模型和演示器

目前我有一個WPF視圖,它實現了一個接口ICustomView。這個接口被注入到我的Presenter中。然後,演示者負責訂閱數據,管理訂閱等。當數據返回給演示者時,它會針對模型(CustomBusinessObjects的IObservable集合)調用各種方法。它使用接口ICustomView執行此操作,因爲IObservable是模型的一個屬性。

我看到的這個問題是模型與視圖耦合太多。演示者還決定對模型調用哪些方法。目前,視圖由一個WinForms網格組成,這由ICustomView公開,允許演示者根據視圖調用方法。但它增加了Presenter和View的耦合,這使得很難換出這個WinForms網格的WPF網格或圖表等

我正在考慮使模型完全獨立的實體可以說IModel與單一方法ProcessUpdate字符串主題,IMessage有效載荷)。這會將邏輯從演示者轉移到模型中。這也意味着不止一種觀點可以分享相同的模型。自定義模型可以具有用於特定定製的額外界面,但演示者只需要瞭解IModel。

這聽起來像一個合理的想法?我在這裏錯過了什麼嗎?

任何意見讚賞。

感謝

+0

WPF或Silverlight = MVVM,ASP.NET = MVP或MVVM – SQLMason 2011-04-19 14:54:14

回答

3

我建議從MVP切換到MVVM,因爲您使用的是WPF。如果您使用ASP.Net或WinForms,我只會使用MVP。

話雖這麼說,你的MVVM對象將是:

型號:簡單的數據對象。它不應該包含任何功能,如保存或編輯,但可以具有驗證邏輯。

查看:您的用戶界面。我通常做我的ViewModel類類型的DataTemplate。它應該綁定到你的ViewModel的屬性和命令。

ViewModel:這件作品結合了兩者。顯示在視圖中的任何數據都應綁定到ViewModel中的一個屬性。視圖中的任何命令(如按鈕點擊)也應該指向ViewModel中的方法。

例如,當用戶在View上點擊一個GetCustomer按鈕時,ViewModel應該接收該命令,去獲取CustomerModel,並展示它的屬性以便視圖綁定。當用戶點擊保存時,ViewModel應驗證模型是有效的,然後使用其CustomerModel屬性執行保存代碼。

0

個人而言,使用WPF的時候我更喜歡使用WPF數據網格,並將其綁定到在MVVM模式一個DataContext。我認爲你需要擺脫的第一件事是WinForms網格(只要你使用WinForms網格,就幾乎不可能分離你的模型/視圖。)

我會研究一些不同的東西。

  • MVVM模式
  • WPF的DataGrid
  • 綁定的DataGrid到一個DataContext

一旦你到這一點,所有你需要做的就是更新你的datacontext,你的視圖將隨之更新。