2009-05-05 6 views
3

Glenn Block과 저는 ViewModel 패턴에 대해 함께 작업했습니다. 우리는 고통을 덜어주기위한 프레임 워크 지원을 추가한다는 목표로 패턴과 관련된 가장 큰 고통 점을 확인하려고 노력해 왔습니다.ViewModel 패턴의 가장 큰 문제점은 무엇입니까?

오늘 밤 글렌은 “View Model” – the movie, cast your vote을 게시했습니다. 우리는 당신에게서 소식을 듣고 싶습니다. ViewModel 패턴 (Model-View-ViewModel 또는 MVVM이라고도 함)을 구현할 때 가장 큰 어려움이 무엇인지 여기에 게시하고 투표하십시오. 프레임 워크가 여러분의 삶을 더 쉽게 만들어 줄 수있는 방법을 알려주세요!

우리는 WPF와 Silverlight를 모두보고 있습니다.

그렇다면 ViewModel을 쉽게 만들기 위해 프레임 워크에서 수행하고자하는 작업은 무엇입니까?

+4

나는 Stack OVerflow 스팸을 생성하는 부분을 싫어한다. –

답변

5
  • 개체 폭발 (모델과 뷰 모델이 모두 있음).
  • 모델을 뷰 모델에 매핑하거나 그 반대의 경우도 마찬가지입니다.

나는 둘 다 필요하다고 생각하지만 고통 점이다.

+0

패턴이 DRY를 위반하는 것처럼 보입니다. 반복하지 마십시오 – ArielBH

0

ViewModel 클래스에서 생성 할 속성이 너무 많습니다. 최소한 내가 보았던 것은 UI 요소의 각 속성에 대해 액세스/바인딩하려는 경우 ViewModel에서 유지 관리하기에는 너무 많은 코드 인 속성을 만들어야합니다.

+0

이것은 복잡한 경험을 위해 ViewModel이 빠르게 커지고 유지 보수/업데이트가 어려워집니다. 속성의 초기 생성은 대부분 자동으로 수행 될 수 있습니다 그러나 ViewModel에서 코드를 찾기가 더 어려워집니다. –

4

컬렉션.

내 Model에 다른 Model 객체 컬렉션이 있지만 ViewModel 객체 컬렉션에 내 GUI를 바인딩하고 싶습니다.

내 ViewModel 레이어에 ObservableCollection<TViewModel>을 만들고 모델 수준 컬렉션의 각 항목에 대해 ViewModel을 수동으로 채울 수 있습니다. 그것은 잘 작동합니다 - 프로그램이 시작될 때. 그러나 사용자가 추가 버튼을 클릭하면 어떻게됩니까? 또는 삭제 버튼을 사용 하시겠습니까? 또는 위로 이동/아래로 이동? 기타

예, 모델 목록과 동기화 된 ViewModel 목록을 유지하는 코드를 작성할 수 있지만 미묘한 엣지 경우가 많으며 모든 것을 얻기 위해 많은 작업 (및 많은 테스트)이 필요합니다. 세부 권리. 이것은 일반적인 시나리오이며 프레임 워크로 구워 져야합니다.

+0

제가 사용한 솔루션은 ObservableCollection에서도 모델의 컬렉션을 기반으로하는 것입니다. Model (모델이 속한 곳)에서 추가/제거하고 변경 사항을 전파합니다. VM 및 GUI에. –

1

INotifyCollectionChanged는 변경 범위에 대한 알림을 지원하지만 범위 업데이트를 게시하려고하면 모든 WPF 컬렉션 컨트롤이 지원되지 않는 예외를 throw합니다. 이것은 컨테이너에 10 개의 항목을 추가하면 레이아웃이 10 번 재평가된다는 것을 의미합니다. 복잡한 컨트롤에서는 꽤 느립니다!

솔루션 SuspendNotifocations 및 ResumeNotifications 메서드를 Observable 컬렉션에 추가하고 모든 WPF 컨트롤이 범위 업데이트 (사용 사례 : 일시 중단, 항목 추가, 다시 시작, 모든 항목이 한 번에 그려 짐)를 인식하도록하는 것이 해결책입니다.