【问题标题】:Asp.net INotifyPropertyChanged on domain objects域对象上的 Asp.net INotifyPropertyChanged
【发布时间】:2013-10-03 08:09:53
【问题描述】:

如果 asp.net 中的域对象实现 INotifyPropertyChanged 并在属性设置器上触发 PropertyChanged 事件会发生什么?

我有一个用于 silverlight 和 WebForms 系统的公共域层。为了让 silverlight 获得所有绑定魔法,域现在可以进行属性通知。

我的网络表单系统似乎没有受到影响(一切仍然正常),但我担心幕后发生了一些我不理解的事情。

我可以制作一个 Silverlight 特定的域层来扩展原始域对象,并覆盖属性以执行通知,但这是否必要?即我是否无缘无故地添加了一层额外的代码。

用 ComponentModel 的东西污染我的域确实很难看。

【问题讨论】:

    标签: c# asp.net silverlight webforms


    【解决方案1】:

    如果没有人订阅该事件,那么引发它就不会发生任何事情。

    您的服务器端 ASP.NET 应用程序不太可能订阅这些事件,这就解释了为什么什么也没发生。

    【讨论】:

      【解决方案2】:

      可能不会发生任何错误,但这不是最好的方法..

      我可以制作一个 Silverlight 特定的域层来扩展原始域对象,并覆盖属性以执行通知,但这是否必要?即我是否无缘无故地添加了一层额外的代码。

      首先要指出的是,您在 Silverlight 中的 UI 不应绑定到域对象。实际上,您的视图绑定到一个 ViewModel,而这个 viewmodel 应该包含模型。

      UI 模型!= 领域模型

      用 ComponentModel 的东西污染我的域确实很难看。

      如果您在域模型中添加表示逻辑,您的业务逻辑层可能会变得一团糟,并且您会失去抽象,因为它与表示层耦合。想象一下,在 2 年内,您迁移到另一个需要模型中特殊逻辑的 Web 框架,您会在业务对象中添加更多逻辑吗?

      在我看来,域模型应该与其他层隔离,并且不应该依赖于技术(在这种情况下,依赖于 Silverlight)

      我将添加一个新层,将您的域对象转换为 Silverlight 模型。这可能看起来像是开销,但这样您的系统将是干净的并且具有清晰的隔离层。

      有一些工具可以帮助您轻松完成此映射,例如 AutoMapper

      【讨论】:

      • 感谢很好的回答。我的 silverlight 应用程序是一个 mvvm 项目,所以我被抽象了(抱歉没有完全解释)但是是的,我的域目前被 propertynotifications 污染了。不确定这是否被认为是表示逻辑,但既然你这么说,那么我的感觉是正确的。生病把那个吸盘分成自己的。无论如何,我都在使用 auromapper 在 dto 和域之间进行映射,因此实现起来并不大。谢谢
      猜你喜欢
      • 2011-12-07
      • 2014-12-20
      • 2014-08-31
      • 2011-11-09
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      相关资源
      最近更新 更多