코딩 측면에서 MVC, MVP 및 MVVM 디자인 패턴의 차이점 C # 예로는 Knockout을 사용하는 WPF

“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)에서 코드가 어떻게 다르게 보일지를 논의하는 기사가 있으면 해당 기사로 리디렉션하십시오.



답변

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

MVC :

전통적인 MVC는

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

MVP :

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

MVVM

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


답변

MVC, MVP, MVVM

MVC (이전 1)

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

MVVM (이미 VM과 UI 구성 요소간에 양방향 바인딩이 있으므로 MVP보다 자동화되어 있습니다)

다른 이미지 :


답변

링크에서 훌륭한 설명 : 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보기는 동일한보기 모델을 공유 할 수 있습니다.


답변

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

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