gpt4 book ai didi

domain-driven-design - 工作单元模式中的回滚方法的意图是什么?

转载 作者:行者123 更新时间:2023-12-04 08:23:34 25 4
gpt4 key购买 nike

据我了解,UnitOfWork 类旨在表示域中业务事务的概念。它不应该直接代表一个数据库事务,它只是一个可能实现的细节。

问:那么为什么这么多关于工作单元模式的文档提到“提交”和“回滚”方法呢?

这些概念对领域或领域专家毫无意义。业务交易可以“完成”,因此 UnitOfWork 应提供“完成”方法。同样,不是“回滚”方法,不应该将其建模为“清除”吗?

更新:

答案:下面的两个答案都是正确的。它们是 UoW 的两种变体:对象注册和调用者注册。在对象注册中,Rollback 用于撤消对所有内存中对象的更改。在调用者注册中,回滚用于清除所有记录的更改,以便后续调用 Commit 不会执行任何操作。

最佳答案

工作单元设计模式,至少由 Fowler 在 Patterns of Enterprise Application Architecture 中定义- 是关于对象关系持久性映射的实现细节。它不是 Evans 的 Domain Driven Design 中定义的实体.

因此,它既不应该是业务讨论的一部分,也不应该是直接暴露在域模型中的实体——也许除了 commit()方法。相反,它的目的是跟踪“干净”和“肮脏”的业务实体——来自暴露给客户端的域模型的对象。目的是允许在 Web 上下文请求中与域模型进行多次交互,而无需每次都从持久性(通常是数据库)中读取和写入。

业务实体在调用它们的方法时调用它。当他们的状态改变时,他们将自己注册为工作单元的脏。然后是工作单位的commit()在写出对象图和 rollback() 方面处理整个持久性事务意味着将实体的状态恢复到原来的状态。所以它的实现在很大程度上泄漏到了“抽象”,但它的意图非常明确。

另一方面,“撤消”和“完成”不一定与此定义一一对应。 “撤消”或“清除”可能仅部分回滚对象图,例如取决于业务上下文。虽然“完成”很可能会改变某些实体的状态以及提交图形。因此,我会将这些具有业务意义的方法放在服务层或聚合根对象上。

关于domain-driven-design - 工作单元模式中的回滚方法的意图是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com