domain-driven-design - 避免领域驱动设计中的工作单元模式

标签 domain-driven-design unit-of-work aggregateroot

我读过这篇文章,这让我三思而后行......:

“避免工作单元模式。聚合根应该定义事务边界。”

为什么有人应该避免应用领域驱动设计的 UOW 模式?

最佳答案

(在我发表文章之前,我建议阅读 V. Vernon 所著的“实现领域驱动设计”一书的 this chapter。它可以帮助接近聚合并包含对您的问题的长答案。)

在设计合理的系统中,一个命令一次更改一个聚合,每个聚合都有由聚合根中的不变量定义的边界。因此,当您对聚合进行任何更改时,会检查不变量并在一个事务中应用(或不应用)更改。这是事务一致性。你需要在这里使用工作单元吗?不要这么认为。

但是,我们经常会遇到一次需要更改多个聚合的情况。事务变得更大,它们触及的不仅仅是系统的一部分,我们谈论的是最终一致性。在这种情况下,UoW 是一个好 helper 。

正如在没有上下文的情况下提到的那样,很难猜测作者在想什么,但我想他谈到了事务一致性案例。在分布式系统中,您需要使用 UoW 之类的东西来为系统提供最终的一致性。

关于domain-driven-design - 避免领域驱动设计中的工作单元模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696568/

相关文章:

domain-driven-design - 事件溯源:聚合根和性能

c# - 使用 C# 和 RavenDB 的自定义字段设计

c# - asp.net mvc 应用程序中的工作单元模式

java - DDD (java) 聚合根和持久性

c# - ASP.NET MVC : what mechanic returns ViewModel objects?

c# - IEnumerable 现在是否比 IReadOnlyList 更防水?

nhibernate - 你应该如何在我的 asp.net-mvc 站点上使用 UnitofWork 模式(使用 nhibernate 和 ninject)

go - 从DDD的角度来看,如何处理DB特定类型?

domain-driven-design - DDD : solution for references to a non aggregate root

domain-driven-design - 为什么每个事务只修改一个聚合实例?