코딩 측면에서 MVC, MVP 및 MVVM 디자인 패턴의 차이점 C #


202

"MVC, MVP 및 MVVM 디자인 패턴의 차이점은 무엇입니까?"라는 문구를 사용하여 Google을 검색하면 이론적으로 다음과 같은 MVC MVP 및 MVVM 디자인 패턴의 차이점 을 논의 하는 URL이 거의 없을 수 있습니다 .

MVP

데이터 컨텍스트를 통한 바인딩이 불가능한 상황에서 사용하십시오. Windows Forms가 이에 대한 완벽한 예입니다. 뷰를 모델과 분리하려면 발표자가 필요합니다. 뷰가 발표자에 직접 바인딩 될 수 없으므로 정보는 인터페이스 (IView)를 통해 뷰에 전달되어야합니다.

MVVM

데이터 컨텍스트를 통한 바인딩이 가능한 상황에서 사용하십시오. 왜? 각보기에 대한 다양한 IView 인터페이스가 제거되어 유지 관리해야 할 코드가 줄어 듭니다. MVVM이 가능한 예로는 Knockout을 사용하는 WPF 및 Javascript 프로젝트가 있습니다.

MVC

보기와 나머지 프로그램 간의 연결을 항상 사용할 수없는 상황에서 사용하십시오 (MVVM 또는 MVP를 효과적으로 사용할 수 없음). 이것은 웹 API가 클라이언트 브라우저로 전송 된 데이터와 분리되는 상황을 명확하게 설명합니다. Microsoft의 ASP.NET MVC는 이러한 상황을 관리하기위한 훌륭한 도구이며 매우 명확한 MVC 프레임 워크를 제공합니다.


그러나 샘플 코드와 이론적으로 차이점을 논의하는 단일 기사를 찾지 못했습니다.

이 3 가지 디자인 패턴 (MVC, MVP & MVVM)과 코드의 차이점을 논의하는 기사를 얻는다면 정말 좋을 것입니다.

이 세 가지 디자인 패턴 (MVC, MVP & MVVM)으로 구현 된 3 개의 유사한 CRUD 앱 의 소스 코드를 직접 확인하고 싶습니다 . 코드를 살펴보고이 세 가지 디자인 패턴 (MVC, MVP & MVVM)의 코드를 작성하는 방법을 이해할 수 있습니다.

따라서 이러한 3 가지 디자인 패턴 (MVC, MVP & MVVM)에서 코드가 어떻게 다르게 보일지를 논의하는 기사가 있으면 해당 기사로 리디렉션하십시오.


14
TechEd 2011에는 이러한 세 가지 패턴에 대한 훌륭하지만 간단한 프레젠테이션이있었습니다. 연사는 C #과 Visual Studio를 사용하여 동일한 비즈니스 모델을 통해 예제를 만들고 보여주었습니다. 여기에는 Channel9에서 비디오입니다 MVC, MVP 및 MVVM은 : 건축 패턴의 비교
마르코 메드 라노

2
다음은 realm.io/news/eric-maxwell-mvc-mvp-and-mvvm-on-android 기사 입니다. 잘 작성되고 명확한 IMO. 또한 각 패턴에 대한 분기가있는 Github 저장소가 있습니다.
cuddlecheek

:이 흥미로웠다 cirw.in/blog/time-to-move-on
앤드류

답변:


100

몇 가지 기본적인 차이점을 간단히 쓸 수 있습니다.

MVC :

전통적인 MVC는

  1. 모델 : 데이터의 모델로 사용
  2. 보기 : UI가 될 수있는보기를 사용자에게 표시합니다.
  3. 컨트롤러 : 모델과 뷰 간의 상호 작용을 제어합니다. 여기서 뷰는 컨트롤러를 호출하여 모델을 업데이트합니다. 필요한 경우 View에서 여러 컨트롤러를 호출 할 수 있습니다.

MVP :

기존 MVC와 유사하지만 컨트롤러는 발표자로 대체됩니다. 그러나 발표자와는 컨트롤러와 달리보기를 변경해야합니다. 보기는 일반적으로 발표자를 호출하지 않습니다.

MVVM

차이점은 모델보기의 존재입니다. 모델의 변경 사항이 VM에 의해 뷰에 표시되는 Observer 디자인 패턴의 일종입니다. 예 : 슬라이더가 변경되면 모델이 업데이트 될뿐만 아니라 뷰에 표시되는 텍스트 일 ​​수도있는 데이터도 업데이트됩니다. 따라서 양방향 데이터 바인딩이 있습니다.


1
작은 세부 사항-양방향 데이터 바인딩인지 선택하거나 단방향 바인딩도 정의 할 수 있습니다.
Jviaches

10
"보기는 일반적으로 발표자를 호출하지 않습니다"? 이 문장에 대해 더 자세히 설명해 주시겠습니까? UI보기가 가고있는 발표자를 호출하지 않을 경우?
Amir Ziarati

3
@AmirZiarati 발표자는 이벤트를 주시합니다. 이벤트가 발생하면 발표자가 작동하여 필요한 조치를 취합니다.
Pritam Banerjee

보기에 대한 참조가있는 한 가능합니다. 나는 그것이 틀렸다는 생각은 적어도 한 번 이상 해야하는 동안보기가 처음에는 발표자를 호출 할 필요가 없다는 것을 의미한다고 생각했습니다. 고마워;)
Amir Ziarati

1
@PritamBanerjee, 설명에서 MVP와 MVVM은 거의 동일한 기능을 가지고 있습니다. P 또는 VM 업데이트를 M & V. 모두
Manohar 레디 Poreddy

42

MVC, MVP, MVVM

MVC (이전 1)

MVP (커플 링이 낮기 때문에 더 모듈화 됨. 발표자는 View와 Model 사이의 중재자 임)

MVVM (이미 VM과 UI 구성 요소간에 양방향 바인딩이 있으므로 MVP보다 자동화되어 있습니다) 여기에 이미지 설명을 입력하십시오

다른 이미지 : 여기에 이미지 설명을 입력하십시오


24
특히 이미지가 서로 동의하지 않는 경우 이미지를 복사하지 마십시오. 브라우저가 MVC (보지 않은 이전)를보고 상단 그림에서는 볼 수 있지만 하단 그림에서는 컨트롤러와 말하기를 참조하십시오.
peter.fr

1
@UddhavGautam 첫 번째 이미지는 View를 시작점으로 표시하고 두 번째 이미지는 Controller를 표시하므로 약간 혼동됩니다.
everlasto

1
첫 번째 다이어그램에서 MVVM과 MVP의 차이점은 무엇입니까? 내가 알다시피, 그것은 V와 VM / P 사이의 링크 일 뿐이다. 어떤 경우에는 앞뒤 메시지를 양방향 링크로 사용하고 다른 경우에는 두 개의 단방향 링크로 표시합니다. 나는 그들 사이에 기능상의 차이가 보이지 않습니다. 내가 무엇을 놓치고 있습니까?
iCyberPaul

1
브라우저는 사용자와 응용 프로그램간에 상호 작용이 발생하는 사용자를 의미합니다.
Uddhav Gautam

4
플롯 트위스트 : 실제로 무슨 일이 일어나고 있는지 아무도 모른다. 그들은 모두 실제로 같은 것입니다. ㅋ. 그러나 실제로 이러한 "유용한"이미지를 사용하더라도 도대체 진행중인 작업을 처리하기가 어렵습니다. 나는 그것이 문제 / 혼란의 일부라고 생각합니다.
Andrew

34

링크에서 훌륭한 설명 : http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

먼저 MVC를 보자

입력은보기가 아닌 컨트롤러로 먼저 향합니다. 이 입력은 페이지와 상호 작용하는 사용자가 올 수도 있지만 브라우저에 특정 URL을 입력하는 것일 수도 있습니다. 두 경우 모두 일부 기능을 시작하기 위해 인터페이스되는 컨트롤러입니다.

Controller와 View 사이에는 다 대일 관계가 있습니다. 단일 컨트롤러가 실행중인 작업에 따라 렌더링 할 다른보기를 선택할 수 있기 때문입니다.

컨트롤러에서보기로가는 한 방향 화살표가 있습니다. View에 컨트롤러에 대한 지식이나 참조가 없기 때문입니다.

컨트롤러는 모델을 다시 전달하므로 뷰와 모델로 전달되는 예상 모델 사이에는 지식이 있지만이를 제공하는 컨트롤러는 아닙니다.

MVP – 모델보기 발표자

이제 MVP 패턴을 살펴 보겠습니다. 몇 가지 주요 차이점을 제외하고 MVC와 매우 유사합니다.

입력은 발표자가 아닌보기로 시작합니다.

보기와 관련 발표자간에 일대일 매핑이 있습니다.

보기에는 발표자에 대한 참조가 있습니다. 발표자는 View에서 트리거되는 이벤트에 반응하므로 View와 관련된 View를 인식합니다.

발표자는 모델에서 수행 한 요청 된 작업에 따라보기를 업데이트하지만보기는 모델을 인식하지 못합니다.

MVVM – 모델 뷰 뷰 모델

우리 앞에 MVC와 MVP 패턴을 가지고 MVVM 패턴을보고 그것이 어떤 차이점을 가지고 있는지 봅시다.

입력은 뷰 모델이 아닌 뷰로 시작합니다.

뷰에는 뷰 모델에 대한 참조가 있지만 뷰 모델에는 뷰에 대한 정보가 없습니다. 그렇기 때문에 여러 기술과 여러 뷰와 하나의 뷰 모델간에 일대 다 매핑이 ​​가능합니다. 예를 들어 WPF보기와 Silverlight보기는 동일한보기 모델을 공유 할 수 있습니다.


7
"보기에 컨트롤러에 대한 지식이나 참조가 없기 때문입니다"이것은 사실이 아닙니다
Adam Wolski

@AmirZiarati ViewModel은 MVP의 일부가 아닌 MVVM 패턴입니다.
Joe

이 패턴을 어디에서 사용할 수 있는지와 같은 예제를 제공하면 좋을 것입니다.
JKA

3

아래 이미지는 Erwin van der Valk가 작성한 기사 에서 가져온 것입니다 .

MVC, MVP 및 MVVM을 설명하는 이미지-Erwin Vandervalk

기사 에서는 차이점을 설명하고 C #의 일부 코드 예제를 제공합니다.


위의 이미지는 MVC에서 VIEW가 Model에 직접 액세스하는 이유와 같이 혼동되지 않습니다. 다른 사람들도 마찬가지입니까?
smkrn110

이 도표에서 화살표가 무엇을 의미하는지 명확하지 않습니다. 화살표가 액세스 또는 조작을 의미합니까? MVC 다이어그램에서 모델에서 시작하는 화살표가없는 이유는 명확하지 않습니다.
Pontios
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.