2009-05-19 5 views

답변

21

여기는 John Gossman 본인이 직접 작성한 advantages and disadvantages of MVVM의 짧은 블로그 게시물입니다.

그의 주요 단점은 다음과 같습니다.

"간단한 UI를 들어, MV-VM은 과잉 더 큰 경우에, 보편성의 적당한 양을 얻기 위해 앞까지 뷰 모델을 설계하는 어려울 수 있습니다 될 수있는 데이터. 모든 불가사의를위한 바인딩은 선언적이며 중단 점을 설정하는 좋은 명령형 구성 요소보다 디버그하기가 더 어렵습니다. "

3

예, 작고 안녕하세요 세계 스타일의 응용 프로그램에는 잔인합니다.

+34

실제로 존재하지 않습니다 –

6

WPF의 몇 가지 비효율적 인 UI 출력 패턴 중 하나입니다. 제가 의미하는 바는 많은 사람들이 그것을 이해하고 채택한 것입니다. 따라서 도움과 정보를 얻는 것이 상대적으로 쉽습니다.

내 생각에 가장 큰 단점은 SRP이이 패턴에서 DRY을 넘어서기 때문에 애플리케이션의 클래스 및 구성 요소 수가 증가한다는 것입니다. 그것이 말하게되면서, 나는 그것이 그것의 가치가있다라고 생각한다.

8

우리의 응용 프로그램을 빌드하기 위해 우리는 MVVM을 시작했지만 MVVM을 사용하지 않는 이유를 알 수있는 다음과 같은 이유로 MVVM에서 많은 문제점을 보였습니다.

상속 문제

우리는 .NET에서 프로그래밍, 우리는 C# .NET을 사용하여 최고의 우리가 반드시 상속합니다. C#은 다중 클래스 상속을 지원하지 않기 때문에 우리는 로직뿐만 아니라 UI에서도 부분적으로 재사용 될 수있는 추상 클래스를 가질 수 없습니다.

대부분의 경우 우리는 논리를 상속하고 제어 할 수 있도록보기 모델을 설계하는 방법에 대해 혼란스러워합니다.

View를 상속하면 같은 시간에 ViewModel을 상속받을 수 없으며 ViewModel을 상속하면 동시에 View를 상속받을 수 없습니다. 대신 우리는 매우 복잡한 제네릭을 사용하고 Prism과 Unity와 같은 도구를 사용하여 달성 할 수 있지만 시간은 가치가 없습니다. 바인딩의 ViewModel에

뷰 모델은

음 A = B + C, UI에 UI 및 응답 등의 간단한 밤은 시간 비즈니스 로직의 대부분은 큰 역할을한다. 그러나 UI의 시각적 속성을 View Model의 데이터 속성에 바인딩 할 수는 있지만 한 뷰 모델을 다른 뷰 모델에 실제로 바인딩하는 방법에 대한 의문이 생깁니다. 두 개의 공유 컨트롤 바인딩을 통과하면 어떤 내용이 실행될 지 전혀 알 수 없습니다 먼저.

뷰 모델 뷰 모델은 코드 숨김 파일의 간단한 교체라고 가정한다 숨김

의 간단한 대체하지 않습니다. 그러나 우리의 앱을 만드는 동안 상속에 대한 제한은 WPF/Silverlight가 UI와 로직을 완전히 분리 할 수있는 스타일을 지원한다는 것을 보여 주었고 ViewModel에서 비즈니스 로직을 분리하는 것으로 끝났습니다.우리는 결국 우리가 모든보기 및 모든 뷰 모델, 엄청난 고통이된다 변화의 코드와 동일한 패턴을 작성하고 유지하는 것을 깨달았다 뷰 모델

에 코드를 반복

너무 고통입니다. MVVM은 테스트 주도 개발에 더 적합하지만 확장 가능 구성 요소 작성시 최상의 후보는 아닙니다.


WPF/실버 라이트는 이미 코드를 분리하고 UI가 아주 멋지게, 우리는 참으로 이제 비즈니스 로직을 수행하고 우리에게 우리가 필요로하는 모든 것을 제공 매우 간단한 클래스 계층 구조를 설계했다 할 수 있습니다. 이제 모든 ICommand 기반 명령 속성을 클래스의 종속성 속성으로 만들고 UserControl과 Templated Control 내에서 바인딩합니다.

CodeBehind의 ICommand 또는 ResourceDictionary의 템플릿 및 스타일은 MVVM에서 얻을 수있는 것의 거의 모든 이점을 제공합니다.

+0

원래 질문을한지 꽤되었습니다. 그 당시 나는 직장에서 내 프로젝트에서 MVVM을 많이 사용 해왔다. 따라서 상속을 사용하면 View 및 ViewModel에서 동시에 상속받는 클래스를 원하십니까? 이 클래스는 View 또는 ViewModel입니까? ViewModels의 반복 코드는 서비스 및 모든 종류의 IOC를 사용하여 해결할 수 있습니다. ViewModel 바인딩과 "ViewModel은 CodeBehind가 아닙니다"나는 동의합니다. –

+0

서비스 및 IOC는 중간 규모 응용 프로그램에 매우 복잡합니다. 최악의 경우는 소규모 팀에서 디버깅 및 관리하기가 너무 어렵습니다. 비록 장점이 있지만 젊은 피를 흘리기에는 너무 복잡합니다. –

1

다른 패턴은 강도가 다릅니다. 사람들은 패턴을 구현과 혼동하는 경향이 있습니다. 비즈니스 논리가 어떻게 배열되거나 액세스되는지는 주어진 패턴에 대해 어떤 패턴이 더 자연스러운 지에 영향을 미칩니다. 그래서이 질문이 WPF에 관해 묻는 동안 어떤 프레임 워크에서든지 같은 화면을 세 번 임 플린팅하는 데 사용되는 세 가지 패턴을 읽는 것이 도움이 될 수 있습니다.

다음은 MVVM ("프리젠 테이션 모델")과 MVP (수동보기) 및 하이브리드 구현 MVVMP/MVC ("감독 컨트롤러")를 비교하는 Java 문서에 대한 링크입니다. 나는이 패턴이 패턴을 비교하는 섹션을 가지고 있기 때문에 이것이이 질문과 관련이 있다고 생각한다.

Implementing event-driven GUI patterns using the ZK Java AJAX framework

요한 Gossman가 만드는 약점을 지적뿐만 아니라 두 개의 다른 패턴을 모두 strenghts과 약점을 비교에 간다.

관련 문제