2011-04-10 62 views
0

我無法看到它在MVVM控制器中物理上不存在?這是否違反了分離關注原則?

http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx

你怎麼想,如果控制器與視圖模型混合,然後分離關注?控制器不僅僅是簡化數據綁定,還有命令。

我的意思是,如果MVVM也具有控制器的責任,那麼這種設計違反了分離關注的原則。維護View和Model的視圖和編排邏輯顯然是兩大任務,它們應該是分開的,這就是MVC C背後的原因

那麼,如果我想擁有一個單獨的控制器,它將如何WPF和silverlight使GUI首先加載,而不允許隱形類首先加載控制器,然後管理視圖和模型?

+0

是不是這樣ViewModel在MVVM中作爲控制器? – Arseny 2011-04-10 13:49:59

+0

我的觀點是它不應該:它違反了分離關注的原則。維護視圖的狀態和編排View和Model的邏輯顯然是兩個應該分開的大任務,這就是MVC的C背後的原因 – user310291 2011-04-10 14:26:24

回答

1

您是不是在關注MVC模式而不是在關注分離角度看待這個問題?我看到它的方式,你的問題比較MVVM和MVC。

有不同的MVVM方法:首先是View-First,ViewModel和Marriage類型。我婚姻類型你可以有另一個類,這些視圖和ViewModel結婚。上述類首先在任何東西之前加載,實例化View和ViewModel然後結合兩者。

public class SomeScreen : ScreenBase, IScreen 
    { 
     [Import(typeof(ISomeViewModel))] 
     public IViewModel ViewModel 
     { 
      get { return this.GetPropertyValue(ApplicationProperties.ViewModel); } 
      set { 
       this.SetPropertyValue(ApplicationProperties.ViewModel, value); 
       RaisePropertyChanged(ApplicationProperties.ViewModel); 
      } 
     } 

     #region Constructor 
     public MainScreen() 
     { 
      CompositionInitializer.SatisfyImports(this); 
     } 
     #endregion 

     #region Methods 
     public override IView GetViewToDisplay() 
     { 
      IView view = new MainView(); 
      //Or maybe have a mechanism here based on settings which view to pair up with this. 
      view.ViewModel = this.ViewModel; 
      this.ViewModel.View = view; 
      return view; 
     } 
     #endregion 
    } 

有了這個例子,就他們之間也沒有因爲接口的依賴關係的完全分離,你可以在一大堆的功能添加到屏幕/控制器了。

+0

您是不是正在關注MVC模式而不是看這個一個關注角度的分離?沒有,因爲原始MVC確實關心分離問題,而MVVM實現確實將控制器的某些部分與視圖和模型視圖混合,僅僅因爲GUI是一等公民而不是模型。但是,謝謝你的示例代碼:是的,我喜歡婚姻類型。 – user310291 2011-04-11 11:59:17

+0

我明白了......一定是誤解了你的問題。希望代碼有幫助。 :) – 2011-04-11 12:07:15

相關問題