2009-07-08 4 views
13

MVVM에서 MSDN 기사를 읽었습니다. 실제로 확신하지 못했습니다. 모델이 이미 INotifyPropertyChanged/INotifyCollectionChanged를 구현하는 경우 모델에 대해 View 바인딩에 어떤 문제가 있습니까? 추가 ModelView는 많은 이점이없는 일부 코드를 도입 한 것으로 보입니다. 내가 빠진 것이 있습니까?MVVM이 정말 유용합니까?

답변

12

나는 약간 회의적이었습니다. MVVM을 내가 볼 때까지 great presentation 제이슨 돌린저. WPF 및 MVVM에서 시작하는 모든 동료가 그것을 보는 것이 좋습니다.

제이슨은 하나가에 이벤트 핸들러에 의해 처리 버튼 클릭과 더불어, "전통적인" 방법으로 작성합니다 응용 프로그램 시작 코드 뒤에 UI의 다음 업데이트 다른 부분. WPF 데이터 바인딩, 명령 및 유니티를 사용하여 조각으로 훨씬 더 관리하기 쉽고, 캡슐화되고 읽기 쉽고 테스트 가능한 M-V-VM 디자인으로 변형되었습니다. 그것은 굉장했다.

귀하의 모델에 이미 모든 것이있는 경우 ViewModel에 바인딩하는 것이 어리석은 경우라도보기로만 필요한 모델을 약간 조정해야하는 경우가 종종 있습니다. 시간이 지남에 따라 이러한 작은 변화는 모델에 속하게됩니다. 모델은 속하지 않습니다. 그것은 당신의 모델을 그들이해야하는 것보다 더 복잡하게 만들 것입니다.

"모두 가지고있는"모델을 가지고 자주하는 일은 하나의 속성 인 모델이 포함 된 ViewModel을 추가하는 것입니다. 그런 다음 내 바인딩에서 Model.Name, Model.Age 등을 바인딩합니다. 실제로는 아무런 노력이 없습니다. 나중에 View에서만 조정해야하는 경우 이미 ViewModel 클래스를 준비했습니다. 이렇게하면 코드가보다 직관적이고 이해하기 쉬워집니다. 이 경우 모델 또는 ViewModel에 바인딩 되었습니까? 항상 ViewModel입니다.

+0

내가 MVVM 시작도 때 나는 회의적이었다은 그 동영상을 본 지금은 내 WPF 애플 리케이션과 MVVM 어떤 형태를 사용하지 않는 나쁜 느낌. 조쉬 스미스 (Josh Smith)의 Crack.NET 소스를 읽는 것도 많은 도움이되었습니다. –

+0

해당 링크가 더 이상 존재하지 않습니다. –

6

INotifyPropertyChangedINotifyCollectionChanged은 고려해야 할 유일한 측면은 아닙니다 ... 많은 경우 모델에서 노출 된 데이터는보기에서 쉽게 사용할 수 없습니다. ViewModel의 역할은 모델과 뷰 간의 어댑터 역할을하는 것입니다.보기를 쉽게 바인딩 할 수있는 형식으로 데이터를 노출하고 뷰를 바인딩하여 명령을 바인딩하여 작업을 수행 할 수 있습니다. 일반적으로 모델은 ICommand들에 노출되지 않습니다 그것 않는 경우, 모델이 WPF 별, 결코입니다 좋은 일이

내가 가지고 ... 당신은 다른 비 WPF 응용 프로그램에서 재사용 할 것이다 몇 달 동안 MVVM을 사용하고 있었고, 내 인생을 훨씬 쉽게 만들어주었습니다. 코드 비하인드 파일에 더 이상 "스파게티 코드"가없고 책임의 명확한 분리, 전반적인 아키텍처가 깨끗합니다 ...

6

내가 여기 내가 뷰 모델로하고있다 몇 가지있다이 개 프로젝트에 대한 MVVM을 사용하고있다 :

  • 을 당신이 뷰 모델을 사용하는 경우 (모델에서 데이터를 변형를, 그것은 생활을하게 모델
  • 구현 명령
  • 캐시가 제공하는 컬렉션을 통해 ICollectionView에 구현 UI 사양이 변경 될 때, 당신은 모델을 변경할 필요가 없습니다 쉽게/지속성 코드)
  • (데이터를 계산하기 위해 고가의 유지)
  • 관리 실행 취소/
  • 검증 데이터 (IDataErrorInfo를) 다시 실행 (빠른 조회 용) 모델 데이터에 대한 사전
  • 게으른 로딩 (가보기에 의해 사용 된 때까지로드되지 않음)
유지

및 모델 자체에 들어 가지 않을 것이다, 또는 사용자 인터페이스 스파게티를 만들 것이라고 (내가 잊었)가 할 일이 많이 더있다.

는 뷰 모델은 당신이 (예 : 명령대로) UI에 구현 된 경우 테스트 할 수 없을 것이다 단위 테스트 것들을 할 수 있도록, 잊지 않습니다.

마지막으로, MVVM을 사용하여, 나는 ViewModels를 사용하여 아주 쉽게 내 응용 프로그램의 명령 줄 버전을 구축 할 수 있었다.

2

지금은 몇 년 동안 MEF와 MVVM을 사용하고 실제로 얼마나 도움이 정말 확실하지 않다거야. 우리의 개발에 우리는 다른 뷰에 대한 ViewModels를 재사용하지 말며 우리는 변화보기 (UI)를 사용할 수 있습니다 디자이너를하지 않습니다.

ViewModel의 변경에 따라 커서 포커스를 설정하는 것과 같이 ViewModel에서 많은 것을 달성하기가 어렵습니다 (예, 가능하지만 코드가 복잡해집니다).

MVVM에 대한 좋은 점은 직접 필드를 설정하는 대신 값과 명령을 바인딩으로 구성하는 것이지만 ViewModel 없이도 수행 할 수 있습니다.

관련 문제