C# 让所有域对象从INotifyPropertyChanged继承有什么反对意见吗?

C# 让所有域对象从INotifyPropertyChanged继承有什么反对意见吗?,c#,mvvm,architecture,inotifypropertychanged,domain-object,C#,Mvvm,Architecture,Inotifypropertychanged,Domain Object,我正在重构和重新设计我的应用程序的域对象,它在某种程度上使用了。是否有任何东西反对让所有域对象()从中继承,这样任何人都可以随心所欲地观察对象 与此相结合,甚至不必非常丑陋 另一方面,对于那些可能根本不需要的东西呢,因为无论如何都会有一个单独的视图模型?Margabit指出:UI模型!=域模型在我看来,域对象不应该实现INotifyPropertyChanged。应该实现它的人是您的视图模型 原因是: 您可能主要需要在保存POCO的viewmodel中引发一个PropertyChanged事件

我正在重构和重新设计我的应用程序的域对象,它在某种程度上使用了。是否有任何东西反对让所有域对象()从中继承,这样任何人都可以随心所欲地观察对象

与此相结合,甚至不必非常丑陋


另一方面,对于那些可能根本不需要的东西呢,因为无论如何都会有一个单独的视图模型?Margabit指出:UI模型!=域模型

在我看来,域对象不应该实现
INotifyPropertyChanged
。应该实现它的人是您的视图模型

原因是:

  • 您可能主要需要在保存POCO的viewmodel中引发一个
    PropertyChanged
    事件
  • 您将只执行一次
  • 如果您的POCO想要引发一个事件并通知其中发生了什么,我不确定
    PropertyChanged
    是否是最有意义的事件

  • 我认为这有点取决于项目的范围:如果这是一个小项目,其中Domainmodels也被用作UI MModel,那么如果您愿意,一定要这样做

    但是,如果您经常需要UI模型,例如,因为有许多属性/方法不属于您的域模型,请不要麻烦-您几乎没有理由或没有理由地创建开销

    什么时候需要UI模型?我的经验法则:如果要引入具有[NotMapped](实体框架)属性的属性,请继续使用此属性创建UI模型


    另外,如果这个项目的某些部分有可能被用于另一个上下文(Webapp、phone等.pp),我建议您不要使用它-您仍然需要UI模型。

    为了避免在类中插入代码,您可以创建一个透明代理。 你可以使用城堡

    唯一的限制是您必须通过工厂创建类的实例

    您也可以使用System.Runtime.Remoting.Proxies.RealProxy类,但您的基类必须派生自MarshalByRef(仍然是POCO?:)


    你知道什么在污染吗?拥有经常需要来回切换的域/UI模型。我见过这个,它不好看。创建一个实现INPC的基类和任何其他对模型方便的基类都没有错。你的肚脐,它不需要你盯着它看那么多。继续前进。