0

我正在重构和重新设计在某种程度上使用MVVM的应用程序的域对象。是否有任何反对让所有域对象(POCO)继承自INotifyPropertyChanged的​​东西,所以任何人都可以按照自己的意愿观察对象。

结合https://stackoverflow.com/a/1316566/448357这甚至不必非常难看。

另一方面,用可能根本不需要的东西污染我的域对象怎么办,因为无论如何都会有一个单独的视图模型?Margabit 指出:UI 模型!= 领域模型

4

3 回答 3

1

IMO,域对象不应该实现INotifyPropertyChanged. 应该实施它的是您的ViewModel

原因是:

  1. 您可能主要需要在PropertyChanged包含 POCO 的视图模型中引发一个事件
  2. 您将只实施一次。
  3. 如果您的 POCO 想要引发一个事件并通知其中发生了某些事情,我不确定PropertyChanged是否会引发最有意义的事件。
于 2014-07-10T08:18:11.650 回答
1

我认为这在一定程度上取决于项目的范围:如果这是一个小型项目,其中 Domainmodels 也用作 UI-mmodels,如果您愿意,请务必这样做。

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

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

此外,如果该项目的某些部分有可能在另一个上下文中使用(Webapp、电话等 pp),我建议不要这样做——无论如何你都需要 UI 模型。

于 2014-07-10T08:19:00.680 回答
0

为避免在您的类中插入代码,您可以创建一个透明代理。您可以使用城堡 http://www.castleproject.org/dynamicproxy/index.html

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

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

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=IT-IT&k=k(SYSTEM.RUNTIME.REMOTING.PROXIES.REALPROXY)%3bk(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4. 0%22)%3bk(DevLang-CSHARP)&rd=true

于 2014-07-10T08:52:23.587 回答