gpt4 book ai didi

.net-core - 如何在 DDD - Event sourcing 中验证事件流?

转载 作者:行者123 更新时间:2023-12-04 00:02:28 25 4
gpt4 key购买 nike

我正在构建一个 DDD/CQRS 事件源应用程序。 (.NET,事件存储)

我阅读了很多关于它的文章,尤其是著名的银行账户主题。

提醒一下,我们有以下事件序列:

  • 银行账户创建
  • 已存
  • 提现
  • 更改所有者
  • 已存

  • 但我从未找到解释如何验证事件序列的博客文章?
    我的意思是,如果我在 BankAccountCreated 之前先收到 Deposited 事件会发生什么?
    换句话说,我如何检查银行帐户是否已创建?
    我如何知道流处于有效状态?

    我必须调用读取模型吗?每次?在每个事件中?聚合的每种方法?
    如果用户发送了两次并且 readmodel 没有同步,会发生什么?

    我已经阅读了很多关于事件溯源的内容,可能还不够^^,但是我没有找到任何关于事件流一致性的信息。

    在我的应用程序中,如果“第一个”事件 (ContactAdded) 不存在,我将无法应用事件。
    这是否意味着我每次需要做某事时都必须调用 EventStore?

    谢谢你的帮助。

    最佳答案

    那里有很多。

    How do I know the stream is in a valid state?



    每个流的每个事件都应该有一个单调递增的版本号。对于每个流(聚合),事件 1 应先于事件 2 等。 EventStore 将通过应用乐观并发来确保这种级别的一致性。当您将事件写入 Event Store 时,您可以提供预期的流版本(例如最后写入的版本)。当您读取事件流时,您获取最后一个版本号,并在将事件写入 EventStore 时将其传递。如果事件流自您上次阅读以来有所增长,则会引发并发错误。

    Do I have to call the read-model? every time? in each event? each method of the aggregate?



    这里有一些术语混淆。请记住事件与命令、读取与写入模型,以及每个模型的用途。您显示来自 Read 模型的数据。您根据您的写入模型进行验证和处理。

    What happen if the user sent it twice and the readmodel is not sync, yet?



    鉴于上面的乐观并发策略,您基本上会得到一个先赢的策略。为了解决这个问题,您可以捕获并发错误并从头开始重新处理您的命令(从 EventStore 获取最新状态)。

    Does it mean I have to call the EventStore each time I need to do something?



    是的。在每个命令上,您将读取聚合和还原状态的事件流。您可以使用快照作为优化,但概念保持不变。

    关于.net-core - 如何在 DDD - Event sourcing 中验证事件流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58221047/

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