纯 DDD 中的数据解放

问题描述 投票:0回答:1

我正在阅读 Adam Bellemare 所著的《构建事件驱动的微服务》一书,有一部分我不明白:

In the perfect world, all state would be created, managed, maintained, and restored from the single source of truth of the event streams. Any shared state should be published to the event broker first and materialized back to any services that need to materialize the state, including the service that produced the data in the first place..
(第 55 页)

如果我拥有所需的所有数据,为什么不更新相关域表,然后附加到同一事务中的发件箱表?必须使用从事件流返回的数据似乎有点麻烦。

我理解 EDM 的原则,即流应该是事实的单一来源,但我想知道我是否误解了这里的某些内容,并且希望对书中上述片段进行解释/解释。

谷歌搜索,但没有找到任何东西

architecture domain-driven-design event-driven
1个回答
0
投票

好吧,没有人阻止你这样做。但发件箱模式解决了另一个问题。

  • 事件流充当事实来源,但发件箱仅在单个有界上下文(或微服务)中处理数据后存储传出消息。
  • 所有微服务都可以从事件流中读取数据来执行其用例。但任何人都不允许从特定微服务的发件箱表中读取数据。
  • 发件箱是一种从微服务内以事务方式发送消息的机制。事件流在所有微服务之间共享,因为它是数据的核心(我们不仅拥有数据的最后状态,而且拥有数据如何到达此处的历史记录)。
  • 发件箱仅限于单个有界上下文及其集成消息。但事件流消息跨越有界上下文(微服务)的所有事件。
  • 发件箱消息的持久化与原始微服务数据在事务上耦合,但事件流消息的持久化完全独立于任何微服务。

当然,如果您有单个有界上下文,您会认为发件箱表与事件流相同(实际上并非如此,因为它不一定跨越所有领域事件,仅跨越集成事件)。但请记住,每个人的目标和实施方式都不同。

© www.soinside.com 2019 - 2024. All rights reserved.