【问题标题】:DDD - Presentation / Application Layer dirty checkingDDD - 表示/应用层脏检查
【发布时间】:2011-07-17 17:21:54
【问题描述】:

如果我的应用程序有一个应用程序层,它公开了可以由我的表示层调用的服务,并且这些应用程序服务将域对象(不使用 DTO)返回到表示层,如果用户更改域对象的状态怎么办然后,我确定用户在将其传递回应用层进行更新时发生了哪些更改??

那么应用层如何确定 UI 对域对象所做的更改,以便它可以

  1. 开始一个工作单元
  2. 从存储库中检索域对象
  3. 将更改应用到域对象
  4. 提交 UnitOfWork

【问题讨论】:

  • 是的,使用 Telerik OpenAccess。

标签: .net orm domain-driven-design


【解决方案1】:

因为您在表示层和“较低”层之间使用应用程序服务,所以您可能使用与 ORM 会话分离的域对象,在表示层中操作它们,然后将它们返回以保持持久性。

真正的问题是你为什么需要这个。通常需要对实体进行脏检查,因为用户在 UI 中对其进行了更改,因此您需要显示诸如“您确定要离开此表单”之类的消息。

无论哪种方式,我建议您研究一下您正在开发的 UI 框架(WinForms / WPF ?)上的数据绑定机制。您可以让您的实体实现 INotifyPropertyChanged 接口之类的东西。您可以让 UI 中的演示者监听此更改,并将当前编辑的实体标记为脏。您可以为包含 IsDirty 属性的实体创建一个基类。这一切都取决于你在哪里以及你想做什么......

【讨论】:

  • 我在我的问题中添加了更多细节。
  • 好吧,我没有使用过 OpenAccess,但我认为所有 ORM 都可以确定如果实体一直附加到会话,是否需要更新实体;但我认为你没有这样做。您还可以通过向数据库发送选择以检查实体是否脏的某种方法将实体附加到会话,但这不是这样做的方法。我建议使用 INotifyPropertyChanged、BindingLists 等进行脏检查,仍然有效……我认为您应该考虑您的控制器/演示者来完成这项工作,并为他们需要持久/更新的对象调用服务
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多