Model-View-ViewModel은 WPF에서 사용할 수있는 최상의 패턴입니까? 단점이 있습니까?MVVM 패턴의 문제점은 무엇입니까?
답변
여기는 John Gossman 본인이 직접 작성한 advantages and disadvantages of MVVM의 짧은 블로그 게시물입니다.
그의 주요 단점은 다음과 같습니다.
이"간단한 UI를 들어, MV-VM은 과잉 더 큰 경우에, 보편성의 적당한 양을 얻기 위해 앞까지 뷰 모델을 설계하는 어려울 수 있습니다 될 수있는 데이터. 모든 불가사의를위한 바인딩은 선언적이며 중단 점을 설정하는 좋은 명령형 구성 요소보다 디버그하기가 더 어렵습니다. "
예, 작고 안녕하세요 세계 스타일의 응용 프로그램에는 잔인합니다.
실제로 존재하지 않습니다 –
우리의 응용 프로그램을 빌드하기 위해 우리는 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에서 얻을 수있는 것의 거의 모든 이점을 제공합니다.
원래 질문을한지 꽤되었습니다. 그 당시 나는 직장에서 내 프로젝트에서 MVVM을 많이 사용 해왔다. 따라서 상속을 사용하면 View 및 ViewModel에서 동시에 상속받는 클래스를 원하십니까? 이 클래스는 View 또는 ViewModel입니까? ViewModels의 반복 코드는 서비스 및 모든 종류의 IOC를 사용하여 해결할 수 있습니다. ViewModel 바인딩과 "ViewModel은 CodeBehind가 아닙니다"나는 동의합니다. –
서비스 및 IOC는 중간 규모 응용 프로그램에 매우 복잡합니다. 최악의 경우는 소규모 팀에서 디버깅 및 관리하기가 너무 어렵습니다. 비록 장점이 있지만 젊은 피를 흘리기에는 너무 복잡합니다. –
다른 패턴은 강도가 다릅니다. 사람들은 패턴을 구현과 혼동하는 경향이 있습니다. 비즈니스 논리가 어떻게 배열되거나 액세스되는지는 주어진 패턴에 대해 어떤 패턴이 더 자연스러운 지에 영향을 미칩니다. 그래서이 질문이 WPF에 관해 묻는 동안 어떤 프레임 워크에서든지 같은 화면을 세 번 임 플린팅하는 데 사용되는 세 가지 패턴을 읽는 것이 도움이 될 수 있습니다.
다음은 MVVM ("프리젠 테이션 모델")과 MVP (수동보기) 및 하이브리드 구현 MVVMP/MVC ("감독 컨트롤러")를 비교하는 Java 문서에 대한 링크입니다. 나는이 패턴이 패턴을 비교하는 섹션을 가지고 있기 때문에 이것이이 질문과 관련이 있다고 생각한다.
Implementing event-driven GUI patterns using the ZK Java AJAX framework
요한 Gossman가 만드는 약점을 지적뿐만 아니라 두 개의 다른 패턴을 모두 strenghts과 약점을 비교에 간다.
- 1. MVVM 패턴의 피벗은 무엇입니까?
- 2. MVVM 패턴의 TypeInitializeException
- 3. ViewModel 패턴의 가장 큰 문제점은 무엇입니까?
- 4. 내 svn : ignore 패턴의 문제점은 무엇입니까?
- 5. MVVM 패턴의 WP7 앱보기에 대한 기준은 무엇입니까?
- 6. MVVM 패턴의 Silverlight 하위 창
- 7. MVVM light, 조정자 패턴의 메시지는 수동으로 삭제해야합니까?
- 8. MVVM 패턴의 UI 레이어에서 도메인 모델을 사용할 수 있습니까?
- 9. 이 패턴의 이름은 무엇입니까?
- 10. MVP 패턴의 흐름은 무엇입니까
- 11. LineUp 등 호출 MVVM 패턴의 ScrollViewer Usercontrol 메서드
- 12. XPath/XML의 문제점은 무엇입니까?
- 13. 이 HQL의 문제점은 무엇입니까?
- 14. reduce()의 문제점은 무엇입니까?
- 15. 이 코드의 문제점은 무엇입니까?
- 16. iPad에서 groupTableViewBackgroundColor의 문제점은 무엇입니까?
- 17. 이 코드의 문제점은 무엇입니까?
- 18. ForEach 루프의 문제점은 무엇입니까?
- 19. 이 RelativeLayout의 문제점은 무엇입니까?
- 20. DCOM의 문제점은 무엇입니까?
- 21. RewriteRule의 문제점은 무엇입니까?
- 22. ActionScript Regex의 문제점은 무엇입니까?
- 23. realloc의 문제점은 무엇입니까?
- 24. UIGraphicsGetCurrentContext()의 문제점은 무엇입니까?
- 25. 이 XPath의 문제점은 무엇입니까?
- 26. Scheme 컴파일러의 문제점은 무엇입니까?
- 27. mysql_num_rows()의 문제점은 무엇입니까?
- 28. 이 Applescript의 문제점은 무엇입니까?
- 29. XMLHttpRequest 요청의 문제점은 무엇입니까?
- 30. 이 xsd의 문제점은 무엇입니까?
건설적이었습니다! – Vahid