为什么 CQRS 和事件溯源应用程序采用 DDD?

Ama*_*are 5 design-patterns domain-driven-design cqrs event-sourcing axon

我刚刚开始使用 CQRS(事件溯源)。在检查许多框架时,我意识到大多数框架都假设我们的应用程序是基于 DDD 原则建模的。我不确定,但有人可以向我解释 DDD、CQRS 和事件溯源如何相互关联,以及为什么通常需要 DDD 来实现 CQRS 和事件溯源模式?

Voi*_*son 10

为什么实施 CQRS 和事件溯源模式通常需要 DDD?

传统。

在更名为“CQRS”之前,相同的想法集合带有“分布式域驱动设计”的标签。Greg Young 的早期演讲是经验报告,描述了他在设计算法交易系统时如何采用埃文斯发表的想法。

实际上,这意味着大多数发现 CQRS 和事件溯源的受众已经相信领域驱动设计是一个好主意。

但它们是不同的想法;即使您不进行事件溯源,CQRS 模式也可能很有用。

谁能向我解释一下 DDD、CQRS 和事件溯源如何相互关联

事件溯源实际上是一对想法

  • 在我们的模型中,变革应该是头等公民
  • 我们的权威数据模型应该是一系列变化(又名历史)

这种数据模型非常适合写入(只需在列表末尾附加新的更改),并且具有编辑是非破坏性的额外好处;添加到系统中的所有信息仍然存在,因此您可以轻松地通过时光机了解某些更改之前的情况。

但历史记录对于低延迟查询来说很糟糕。因此:缓存 - 我们将预先计算一些问题的答案,并将它们放入属性袋中。

现在我们有两个模型:历史和缓存。什么是 CQRS?

CQRS 只是创建两个对象,而之前只有一个对象 - Greg Young 2010