MVC에 비해 MVP의 개선점은 무엇입니까?


49

3 일 동안 MVC (Model-View-Controller)MVP (Model-View-Presenter) 패턴에 대해 읽었습니다 . 그리고 나를 매우 귀찮게하는 한 가지 질문이 있습니다. MVC가 이미있을 때 소프트웨어 설계자가 MVP를 발명 한 이유는 무엇입니까?

MVC가 해결하지 못했거나 심하게 해결되지 않았지만 MVP가 해결할 수있는 문제는 무엇입니까? MVP는 어떤 문제를 해결하려고합니까?

MVP의 역사와 설명 또는 MVC와 MVP의 차이점에 대한 많은 기사를 읽었지만 내 질문에 대한 명확한 대답은 없었습니다.

내가 읽은 기사 중 하나에서 다음과 같이 말했습니다.

이제 Model View Presenter는 최신 컴포넌트 기반 그래픽 사용자 인터페이스에 적용 할 때 MVC 패턴의 부적합에 대한 응답이었습니다. 최신 GUI 시스템에서 GUI 구성 요소 자체는 일부 중앙 컨트롤러가 아닌 마우스 이동 및 클릭과 같은 사용자 입력을 처리합니다.

그래서 이해할 수는 없지만 실제로 GUI 구성 요소가 사용자 입력을 직접 처리하지 못하는 다른 방법이 있습니까? 그리고 "자체 취급"이란 정확히 무엇을 의미합니까?



4
미키 소프트의 새로운 유행어 인 "황제의 새로운 옷"일 뿐이라고 생각합니다.
qwerty_so

4
빅터, "두 가지 다른 패턴이있는 이유"이외의 다른 질문이 있습니까? 동일한 문제를 두 가지 방법으로 해결하기 때문에 두 가지 패턴이 있습니다. 도움이 될 경우 모델과 뷰는 두 패턴에서 본질적으로 동일합니다. 컨트롤러와 발표자의 차이점에 중점을 둡니다. 도움이 필요하시면 여기를 클릭하십시오 : linkedin.com/pulse/…
Robert Harvey

18
"저는 3 일 동안 MVC 및 MVP 패턴에 대해 읽었습니다." Yikes. 나는 당신이 편안한 뜨거운 목욕을하거나 오리로 가득 찬 연못이나 다른 것을 가로 지르는 돌을 건너 뛸 것을 제안합니다. 그러한 종류의 독서는 실용적인 응용 프로그램이없는 경우 실제로 뇌를 녹일 수 있습니다!
user1172763

11
원하는 답변을 얻는 방법은 이러한 패턴을 사용하여 무언가만드는 것 입니다. 그러면 깨달을 것입니다.
Robert Harvey

답변:


63

MVC는 개념적으로 우아합니다.

  • 사용자 입력은 컨트롤러에 의해 처리됩니다
  • 컨트롤러가 모델을 업데이트합니다
  • 모델이보기 / 사용자 인터페이스를 업데이트합니다
           +---+
      +----| V |<----+
user  |    +---+     | updates
input |              |
      v              |
    +---+          +---+
    | C |--------->| M |
    +---+ updates  +---+

그러나 MVC의 데이터 흐름과 이벤트 흐름은 순환 적입니다. 그리고 뷰에는 종종 사용자 로직을위한 이벤트 핸들러와 같은 중요한 로직이 포함됩니다. 이러한 특성으로 인해 시스템을 테스트하기 어렵고 유지 관리하기가 어렵습니다.

MVP 아키텍처는 컨트롤러를 발표자와 교체하여 뷰와 모델을 중재합니다. 이것은 시스템을 선형화합니다.

       user input         updates
+---+ -----------> +---+ --------> +---+
| V |              | P |           | M |
+---+ <----------- +---+ <-------- +---+
        updates            updates

다음과 같은 장점이 있습니다.

  • 논리 (이벤트 핸들러 및 사용자 인터페이스 상태와 같은)를보기에서 발표자로 이동할 수 있습니다.

  • 사용자 인터페이스는 사용자 인터페이스 상태를 설명하므로 발표자 관점에서 단위 테스트를 수행 할 수 있습니다. 단위 테스트 내에서 뷰를 발표자를 호출하는 테스트 드라이버로 바꿉니다.

  • 사용자 인터페이스는 애플리케이션 로직과 분리되어 있기 때문에 둘 다 독립적으로 개발할 수 있습니다.

그러나이 방법에는 몇 가지 단점이 있습니다.

  • 더 많은 노력이 필요합니다.
  • 발표자는 유지 관리 할 수없는 "신 클래스"로 쉽게 변경할 수 있습니다.
  • 응용 프로그램에는 단일 MVP 축이 없지만 여러 축이 있습니다. 사용자 인터페이스의 각 화면 / 창 / 패널마다 하나씩입니다. 아키텍처를 단순화하거나 지나치게 복잡하게 만들 수 있습니다.

7
좋은 대답이지만 현대의 MVC는 일반적으로 로컬 폼 유효성 검사를 제외하고는 이벤트 처리기를 많이 사용하지 않으며, 이러한 이벤트를 MVC의 일부로 간주하지 않습니다. 그래서 MVP와 MVVM이 있습니다. MVC는 본질적으로 서버 측입니다.
Robert Harvey

@ amon, 답변 주셔서 감사합니다, 그것은 나에게 많은 것들을 말합니다. 그리고 응용 프로그램에 여러 축이 있으면 아키텍처를 단순화 할 수 있습니다. MVC가 복잡한 GUI 요구 사항과 일치하지 않기 때문에 MVP를 발명 한 주된 이유 중 하나로 여러 논문에서이 아이디어를 충족 시켰습니다. 즉, MVP와 일치하는 요구 사항과 해당 요구 사항을 어떻게 해결합니까? 영속적 인 것에 대해 죄송하지만, 나는 그것을 잘 이해하고 싶습니다.
Victor

4
@Victor 최상의 패턴은 없지만 장단점이 다릅니다. MVC는 복잡한 요구 사항과 일치 할 수 있습니다. 아키텍처 측면에서 MVP는보기와 발표자간에 1 : 1 관계를 적용합니다. 각보기에는 고유 한 발표자가 있고 각 발표자는 하나의보기에 연결됩니다. MVC에는 n : m 관계가 있습니다. 하나의 뷰는 여러 개의 다른 컨트롤러에 사용자 입력을 보낼 수 있으며 하나의 컨트롤러는 많은 뷰에서 입력을받을 수 있습니다. 더 유연하지만 혼란스러워 – MVC에는 명확한“축”이 없습니다.
amon

1
@Victor GUI에 대한 경험이 많지 않으므로 언급하지 않은 것이 많습니다. 내가 한 마지막 GUI는 그 시점에서 MVP에 대해 알지 못했기 때문에 절대 엉망이었습니다. 선형화 된 데이터 및 제어 흐름은 크게 개선되었을 것입니다.
amon

9
@RobertHarvey 나는 웹이 "MVC"라고 부르는 것이 원래의 정의에 의해 결코 "MVC"가 아니라고 주장 할 것이다. 약어를 납치 한 사람은로드 된 용어를 선택하고 모든 사람을 혼란스럽게하기 위해 머리를 거꾸로 쳐야합니다.
jpmc26

6

MVP에서 발표자는 MVC의 컨트롤러를 대체합니다. 이 둘의 차이점은 발표자가 직접보기를 조작한다는 것입니다. 이 기능은 WV와 같은 MVVM 패턴에 적합한 풍부한 데이터 바인딩에 대한 강력한 지원없이 주로 이벤트 기반 (Windows Forms와 같은) UI 프레임 워크를 위해 설계되었습니다. 그렇지 않으면 뷰 상태를 관리하고 백업 모델을 업데이트하기위한 많은 논리가 뷰 자체에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.