.net core 如何验证DDD-事件源中的事件流?
我正在构建DDD/CQRS事件源应用程序。(.NET、EventStore) 我读了很多关于它的文章,尤其是著名的银行账户话题 作为提醒,我们有以下事件顺序:.net core 如何验证DDD-事件源中的事件流?,.net-core,domain-driven-design,cqrs,event-sourcing,.net Core,Domain Driven Design,Cqrs,Event Sourcing,我正在构建DDD/CQRS事件源应用程序。(.NET、EventStore) 我读了很多关于它的文章,尤其是著名的银行账户话题 作为提醒,我们有以下事件顺序: 创建银行账户 存放 撤回 变换器 存放 但是我从来没有找到一篇解释如何验证事件序列的博文? 我的意思是,如果我在BankAccount创建之前先收到存款事件,会发生什么? 换句话说,如何检查是否创建了银行帐户? 如何知道流处于有效状态 我必须调用read模型吗?每一次?在每个事件中?聚合的每种方法? 如果用户发送了两次,而readmode
everythingWeKnowNow = domainModel(everythingWeKnewBefore, newInformation)
随着新信息的到来,我们将其与之前发生的事情结合起来,以产生新版本的“真相”
在CQRS的世界里,这一切都发生在“写模型”中——我们从“真相”的权威表示开始工作,而不是过时的副本,我们根据域的要求修改它
事件源部分实际上只是表示的一个区别:我们不计算新状态,然后覆盖以前的副本,而是计算更改,并将这些更改附加到以前的副本中(我们总是可以通过简单地枚举更改列表来重新计算状态)
因此,我们的状态的权威副本总是包含由域模型按照写入顺序计算的事件
这里的广义模式是这样一种想法,即模型是系统中信息的权威,而事件源只是存储该信息的另一种方式(支持时态查询的方式)
对于解决方案中需要对事件进行权威排序的部分,诀窍是将它们作为有序序列从事件存储中检索,而不是一次读取一个并尝试重新构建序列。换句话说,您将使用拉模型而不是推模型来将事件从一个系统传递到另一个系统
当您在基于推送模型的系统中工作时,事件可能会被错误排序,那么您需要将其构建到您的设计中。这往往以跟踪丢失的信息并等待信息到达的形式发生
(您还必须更加注意时间;消息到达时间是了解事情发生时间的一个相当有损的替代品)
分布式系统很难实现,我们在本地学习到的捷径不再有效。谢谢你的回答,这证实了我最初的想法。