Pat*_*Pat 3 domain-driven-design cqrs event-sourcing .net-core
我正在构建一个 DDD/CQRS 事件源应用程序。(.NET,事件存储)
我阅读了很多关于它的文章,尤其是著名的银行账户主题。
提醒一下,我们有以下事件序列:
但我从未找到解释如何验证事件序列的博客文章?我的意思是,如果我在 BankAccountCreated 之前先收到 Deposited 事件会发生什么?换句话说,我如何检查银行帐户是否已创建?我如何知道流处于有效状态?
我必须调用读取模型吗?每次?在每个事件中?聚合的每种方法?如果用户发送了两次并且 readmodel 尚未同步,会发生什么情况?
我已经阅读了很多关于事件溯源的内容,可能还不够^^,但是我没有找到任何关于事件流一致性的信息。
在我的应用程序中,如果“第一个”事件 (ContactAdded) 不存在,我将无法应用事件。这是否意味着我每次需要做某事时都必须调用 EventStore?
谢谢你的帮助。
那里有很多。
我如何知道流处于有效状态?
每个流在每个事件上都应该有一个单调递增的版本号。对于每个流(聚合),事件 1 应先于事件 2 等。EventStore 将通过应用乐观并发来确保这种级别的一致性。当您将事件写入 Event Store 时,您可以提供预期的流版本(例如最后写入的版本)。当您读取事件流时,您获取最后一个版本号,并在将事件写入 EventStore 时将其传递。如果事件流自您上次阅读以来有所增长,则会引发并发错误。
我必须调用读取模型吗?每次?在每个事件中?聚合的每种方法?
这里有一些术语混淆。请记住事件与命令、读取与写入模型,以及每个模型的用途。您显示来自 Read 模型的数据。您根据您的写入模型进行验证和处理。
如果用户发送了两次并且 readmodel 尚未同步,会发生什么情况?
鉴于上面的乐观并发策略,您基本上会得到一个先赢的策略。为了解决这个问题,您可以捕获并发错误并从头开始重新处理您的命令(从 EventStore 获取最新状态)。
这是否意味着我每次需要做某事时都必须调用 EventStore?
是的。在每个命令上,您将读取聚合和还原状态的事件流。您可以使用快照作为优化,但概念保持不变。
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |