我正在重构和重新设计我的应用程序的域对象,它在某种程度上使用MVVM。是否存在任何反对使所有域对象(POCOs)继承自INotifyPropertyChanged的内容,因此任何人都可以按照自己的意愿观察对象。
结合https://stackoverflow.com/a/1316566/448357,这甚至不必非常难看。
另一方面,polluting my domain object有什么可能根本不需要的东西,因为无论如何都会有一个单独的View-Model? Margabit指出: UI模型!=域模型
答案 0 :(得分:1)
IMO,域对象不应实现INotifyPropertyChanged
。应该实现它的是 ViewModel 。
原因是:
PropertyChanged
事件来保存您的POCO PropertyChanged
是否是最有意义的事件。答案 1 :(得分:1)
我认为这取决于项目的范围:如果这是一个小项目,其中Domainmodels也被用作UI-mmodels,如果你愿意的话,一定要这样做。
但是如果你经常需要UI模型,例如因为有很多属性/方法不属于您的域模型,所以不要打扰 - 您只需很少或没有理由创建开销。
什么时候需要UI模型?我的经验法则:如果要引入具有[NotMapped](实体框架)属性的属性,请继续使用此属性创建UI模型。
如果这个项目的某些部分有可能在另一个环境中使用(Webapp,手机等等),我建议反对它 - 无论如何你都需要UI模型。
答案 2 :(得分:0)
为避免在类中插入代码,您可以创建透明代理。 你可以使用Castle http://www.castleproject.org/dynamicproxy/index.html
唯一的限制是您必须通过工厂创建类的实例。
您也可以使用System.Runtime.Remoting.Proxies.RealProxy类,但您的基类必须派生自MarshalByRef(仍然是POCO?:)。