도메인 모델은 주로 도메인을 모델링해야하므로 그 기본 책임이 있습니다. Arnis L.이 또 다른 대답으로 제시 한 것처럼, 도메인 모델은 프레젠테이션 레이어를 포함해서는 안되며, 나는 동의 할 수밖에 없습니다.
그러나 실용적으로 INOTifyPropertyChanged (INPC)는 사용 가능한보다 나은 인터페이스 중 하나라고 생각합니다. 주요 목적은 UI 프레임 워크 (Windows Forms와 WPF 모두 사용)를 지원하는 것이지만 주로 신호 메커니즘입니다. 그것을 구현하는 데 관련된 작업의 양은 별개이지만 많은 해를 끼치 지 않습니다.
기본적으로 도메인 개체에 구현하지는 않겠지 만 (일부 경우에는 내 View Models에서 요구하는) 신호 메커니즘이 필요하기 때문에 주저하지 않을 것입니다. 결국, SRP가 클래스가 단 하나의 책임만을 가져야한다고 언급하더라도, 그러한 클래스는 여전히 태스크에 가장 적합한 유형입니다. 다른 클래스는 상태가 클래스 자체보다 변할 때 더 잘 알지 못합니다.
도메인 모델에 신호 메커니즘이 필요하다면 INPC를 구현하십시오. 새로운 것을 발명 할 이유가 없습니다. 인터페이스는 System.ComponentModel에 정의되어 있으므로 특정 UI 프레임 워크에 묶여 있지 않다는 것을 알 수 있습니다.
INPC 구현의 주된 단점은 관련된 작업의 양이므로 필요한 경우에만 구현합니다.
나중에 - 무수한 'Serializable'속성, 코드 액세스 보안 관련 항목을 추가하고 제 3 자 인터페이스를 구현 한 다음 너무 늦을 것입니다 - 진흙 투성이입니다. 어쨌든 - 행운을 빌어 요. :) –
마크와 동의해야합니다. INotifyPropertyChanged는 UI 바인딩에 많이 사용되지만 어떤 경우에는 도메인 이벤트를 감지하는 데 사용할 수 있습니다. 구현의 자세한 성격에 관해서는, 처리를 기본 클래스로 캡슐화하거나, T4를 사용하거나, 동적 프록시를 사용하거나, ActiveSharp (또는 모두의 조합)을 사용할 수 있습니다. –
도메인 엔터티는 절대로 INotifyPropertyChanged 의미 론적 측면에서도 적절하다고 보입니다. WPF에서는 UI 스레드에서 모든 PropertyChanged 이벤트가 발생해야합니다. 이로 인해 도메인 엔터티가 UI 스레드에 바인딩됩니다. 그래서, 제 제안은 도메인 엔티티가 "업데이트 된"이벤트를 제공하고 ViewModel이 ui 통지를 처리하도록해야한다는 것입니다. –