2011-04-10 2 views
0

내가 볼 수없는 그 MVVM 컨트롤러에 물리적으로 존재하지 않습니까? 이것은 우려의 분리 원칙을 위반하지 않습니까?

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

어떻게 컨트롤러가 뷰 - 모델과 혼합되어있는 경우 다음 문제를 분리하고 싶어

? 컨트롤러는 명령어가있는 데이터 바인딩으로 축소되지 않습니다.

MVVM에도 컨트롤러의 책임이있는 경우이 디자인은 관심사 분리 원칙에 위배됩니다. 보기의 상태를 유지하고보기 및 모델의 논리를 조율하는 것은 분명히 분리되어야하는 두 가지 큰 작업입니다. MVC의 C 뒤에있는 이유입니다.

그렇다면 별도의 컨트롤러가 필요한 경우 어떻게 될 것입니까? WPF와 실버 라이트는 보이지 않는 클래스를 컨트롤러처럼 먼저로드 한 다음 뷰와 모델을 관리하지 않고 GUI로드를 먼저 만듭니다.

+0

그렇다면 ViewModel이 MVVM에서 컨트롤러 역할을합니까? – Arseny

+0

요점은 그것이 분리되어서는 안된다는 것입니다 : 그것은 분리의 원칙을 위반합니다. 보기의 상태를 유지하고보기 및 모델의 논리를 조율하는 것은 분명히 분리되어야하는 두 가지 큰 작업입니다. MVC의 C 뒤에 그 이유가 있습니다. – user310291

답변

1

MVC 패턴과 관련하여이 문제를 각도의 분리 각도로 보지 않고 조사하고 있지 않습니까? 내가 보는 방식대로 MVVM을 MVC와 비교합니다.

MVVM에 대한 접근 방식에는 View-First, ViewModel first 및 Marriage 유형이 있습니다. 나는 결혼 유형을 사용하여 View와 ViewModel을 결혼하는 또 다른 클래스를 가질 수 있습니다. 이 클래스는 무엇보다 먼저 View를로드하고 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는 GUI가 일류 시민이면서 모델이 아니기 때문에 MVC 구현은 컨트롤러의 일부분을 뷰와 모델 뷰와 혼합합니다. 하지만 샘플 코드를 주셔서 감사합니다 : 예, 나는 결혼 유형을 선호합니다. – user310291

+0

나는 당신의 질문을 조금 오해했을 것입니다. 희망 코드가 도움이됩니다. :) –

관련 문제