2011-08-10 4 views
4

나는 MVVM의 모델이 ObservableCollection<T>, INotifyPropertyChangedIDataError과 같은 인터페이스를 구현하는 것이 일반적이라는 것을 msdn에서 읽었습니다.왜 ObservableCollection과 INotifyPropertyChanged가 모델에 있습니까?

제 질문은 이것이 ViewModel 수준이 아닌 모델 수준에서 수행되는 이유입니다. "순수한"모델에는 알림 로직, 데이터 및 비즈니스 로직이 없기를 기대합니다. 나의 첫 번째 인상은 VM이 모델의 속성을 래핑하고 알림을 처리한다는 것입니다.

모델에서 이러한 인터페이스를 구현하면 많은 경우에 구현이 쉬워 질 수 있음을 쉽게 인정하지만 모델이 알림을 담당해야하는 이유에 대한 설명을 찾고 있습니다.

답변

4

INPC는 특히 WPF에 속한 ICommand 및 DependencyObject와 달리 핵심 프레임 워크의 일부입니다. 서비스 계층에서 IQueryable을 노출하는 것과 관련하여 비슷한 질문이있었습니다. INPC와 마찬가지로 IQueryable은 핵심 프레임 워크 클래스입니다. 순수한 모델을 만들기 위해 그 중 하나를 사용하지 않는 것이 과잉입니다.

더 나쁜 경우 복제가 발생하여 VM 랩이 속성 변경 알림 만 추가합니다.

Observable Collection은 다른 짐승입니다. 일반적으로 도메인 모델의 컬렉션은 엔티티 관계를 나타냅니다. 대부분의 경우 인스턴스화를 제어 할 수 없습니다. 거기에 교환 할 수 있습니다.

1

응용 프로그램에 따라 동일한 데이터의 여러보기 및 ViewModel이있을 수 있습니다. 읽기 전용 세부 사항이있는 항목 목록을 보여주는 하나의 창을 가지고 있지만 다른 창에서는 항목을 추가, 편집 및 제거 할 수있는 기능이 있다고 가정 해보십시오.

모델에서 ObservableCollectionINotifyPropertyChanged을 사용하는 경우 편집 가능한 View/ViewModel의 변경 사항을 편집/편집 할 수없는 View/ViewModel에서보고 업데이트 할 수 있습니다.

또한 편집 할 수없는보기가 충분히 간단한 경우 모델에 직접 노출하고 바인딩하는 것이 가능하고 허용 될 수 있습니다. 통지를 처리 ​​할 ViewModel이 없으므로, 모델은 작업 자체를 수행해야합니다.

관련 문제