34

나는이 패턴들이 각각 어떻게 작동하고 그것들 사이의 사소한 차이점에 대해 알고 있는지 꽤 잘 알고있다. 그러나 그것들은 정말로 정말로 서로 다른 것들인가?Presenter, Presentation Model, ViewModel 및 Controller의 차이점은 무엇입니까?

발표자, 프리젠 테이션 모델, ViewModel 및 컨트롤러는 본질적으로 같은 개념입니다.

왜 이러한 모든 개념을 컨트롤러로 분류 할 수 없습니까? 나는 그것이 전체 아이디어를 아주 단순하게 만드는 것처럼 느낀다.

누구나 그들의 차이점을 명확하게 설명 할 수 있습니까?

패턴이 어떻게 작동 하는지를 이해하고 대부분 기술을 하나의 기술에서 구현했음을 분명히 밝힙니다. 내가 정말로 찾고있는 것은 이러한 패턴 중 하나에 대한 누군가의 경험이며, 왜 그들이 ViewModel을 Controller라고 생각하지 않는지입니다.

나는이 점에 대해 몇 가지 평판을 제시 하겠지만, 나는 정말 좋은 대답을 찾고있다.

답변

42

큰 읽기 (파울러 & 밀러)와 컨트롤러/발표자들 사이의 차이에 지점에 댓글을 올리려면 언급/...보기의 개발자의 관점에서 : MVC에서

컨트롤러 :

  • 컨트롤러는 사용자 상호 작용의 결과로 호출되는 실제 구성 요소입니다. (개발자는 컨트롤러에 대한 호출을 위임하는 코드를 작성할 필요가 없습니다.)

  • 컨트롤러,하지만 당신이 정말로 그것을 가보기에를 상호 작용하는 언급하지 않았다 무엇이든보기/환경/가방 /에서 어떻게 든 현재 값을 얻는다 .

  • 컨트롤러는 사용자에게 표시 할 마지막보기를 결정합니다. 그 점에서 Controller는 애플리케이션 탐색 워크 플로의 명확한 개념을 보여줍니다.

발표자 MVP에서 :

  • 발표자가 유저의 조작에 따라 제어를받는 실제 성분 인보기로 불리는 방법이있다. (개발자가 발표자에게 전화를 걸려면보기에 코드를 써야합니다.)

  • Presenter는보기에서 현재 값을 가져 오거나 호출시보기에서받습니다. Presenter는 뷰의 메서드를 호출하여 상태를 설정합니다 (채우기는, Josh Smith). 발표자가 호출 한보기 메서드 에는 본문에서 수행되는 몇 가지 작은 설정이있을 수 있습니다.

  • Presenter는 명시 적으로 응용 프로그램 워크 플로의 개념을 표시하지 않습니다. 일반적으로 호출 뷰에 제어권을 반환하는 것으로 간주됩니다.

PresentationModel PM에서 :

  • PresentationModel 사용자 상호 작용시 제어를받는 실제 성분 인보기로 불리는 방법이있다. (개발자는 PresentationModel을 호출하기 위해보기에 코드를 작성해야합니다.)

  • PresentationModel은 발표자와 비교하여 훨씬 더 개의 대화방과 통신합니다. 또한 뷰에 적용 할 모든 설정의 값을 파악하고 뷰에 실제로 설정하기 위해 더 많은 논리를 포함합니다. 이러한 뷰 메서드에는 차례대로 로직이 거의 없습니다.

  • PresentationModel에는 응용 프로그램 워크 플로의 개념이 명시 적으로 표시되지 않습니다. 일반적으로 호출 뷰에 제어권을 반환하는 것으로 간주됩니다.

뷰 모델 MVVM에서 :

  • 뷰 모델은 사용자 조작에 따라 제어를 수신하는 실제 구성 요소보기에서 호출 방법 (& 속성 설정)을 갖는다. (개발자는 ViewModel을 호출하기 위해보기에 일부 (선언적) 코드를 작성해야합니다.)

  • ViewModel은 View를 PresentationModel에 비해 명시 적으로 의사 소통하지 않습니다 (즉, View를 많이 호출하지는 않습니다. 그것을한다). 하지만 View 설정으로 1 대 1로 매핑되는 많은 속성이 있습니다. 그것은 여전히 ​​모든 설정의 가치를 파악하는 동일한 논리를 포함합니다.

  • ViewModel은 명시 적으로 응용 프로그램 워크 플로우 개념을 표시하지 않습니다. 일반적으로 호출 뷰에 제어권을 반환하는 것으로 간주됩니다.

  • Josh Smith가 말하는 것 (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx) : MVVM 패턴은 적은 코드를 작성하기 위해 WPF/SL과 같은 프레임 워크를 이용하는 PM의 특수한 경우입니다.

+0

다른 프레임 워크 (ASP.NET MVC, WPF, SL)에서 이러한 디자인 패턴 중 어느 것이 사용되는지에 대해 언급 할 수 있습니까? –

+0

나는 주변의 모든 * 틀을 절대 알지 못한다. 당신은 ASP.NET 것들을 언급 : ASP.NET MVC,'Views'와'Controllers'는 MVC와 매우 흡사합니다 (Ruby on Rails에서도 마찬가지입니다). WPF/SL은 'XAML'UI 구성 요소와 C# 코드가 포함 된 MVVM에 상당히 밀착되어 있습니다. 저에게 Caliburn.Micro는 ViewModel-first 접근 방식에서 MVVM에 훨씬 더 가깝습니다. MV *로 불리는 경우에도, AngularJS는 뷰가 너무 많은 코드를 보유하지 않는다면, MVVM 예제이기도합니다. – superjos

1

적어도 .Net에서 MVP는 디자인 패턴으로 사용됩니다. 이것은 일반적으로 Windows Forms 응용 프로그램 또는 고전적인 ASP.Net에서 사용됩니다. MVC 및 MVVC에서는 일반적으로 ASP.Net과는 상당히 다른 아키텍처를 사용하는 ASP MVC와 함께 사용됩니다.

5

두 코드의 차이점은 본질적으로보기에 표시되는 코드의 양입니다. 이들 사이의 선택은 실제로 WFP, WinForms, ASP MVC (2)와 같은 응용 프로그램의 기술 선택입니다. 논리와 표현을 분리하는 기본 아이디어는 같습니다.

Here은 모두 3 가지에 대해 매우 좋은 기사입니다.

편집 :

One 더 기사 - 비교.

+0

이 주제에 관해 많은 기사를 읽었지만 그 중 하나는 아닙니다. 고마워. 그러나, 기술에 의존하는 패턴은 MVVM 뿐이며, 심지어 Flex에서도 동일하게 구현 될 수 있습니다. – Nicholas

0

제 생각에는 MVP, MVVC, MVC 및 프리젠 테이션 모델 간에는 개념적으로 차이가 없습니다. 몇 가지 세부적인 차이점이 있지만, 결국 Model View Controller 설정으로 계속 생각할 수 있습니다. 여분의 명명은 혼란을 야기하는 역할을하며 컨트롤러를 설명 할 때 일정한 위도를 허용하는 용어를 채택하는 것이 더 나을 것이라고 생각합니다.

+1

의견이 있으십니까? 나는 OP가 대답을 요구 한 것이 아니라 의견을 요구했다고 생각한다. 게다가, 분명히 차이가 있습니다. 내 의견으로는,이 대답은 나빴다. – Tower

+6

@Tower 하 아하 ... 나는 똑똑한 사람에게 질문하는 사람이었다. – Nicholas

+1

이것은 값을 매길 수 없습니다. – dcow

34

마틴 파울러 (Martin Fowler)는 MVC, MVP 및 기타 패턴에 대해 정의한 후 이야기하는 UI 디자인 패턴에 관한 페이지를 가지고 있습니다.

http://martinfowler.com/eaaDev/uiArchs.html

컨트롤러는 UI를 제어하는 ​​활성이다. 예를 들어, UI에 의해 트리거 된 모든 이벤트를 처리하고 적절하게 처리합니다.

발표자 발표자는보다 수동적이며 UI를 통해 데이터를 표시하고 자신의 이벤트 등을 처리하거나 발표자를 통해 서비스 또는 명령에 위임합니다.

ViewModel은 발표자의 특정 예이며 WPF/Silverlight 바인딩과 함께 사용하도록 설계되었습니다.

프리젠 테이션 모델은 뷰에서 직접 표현할 수있는 모델이므로 예를 들어 모델에서 데이터 바인딩을 위해 INotifyPropertyChanged를 구현하면 프리젠 테이션 모델이됩니다. 이미 게다가

관련 문제