首页 > 解决方案 > 使用 DDD CQRS 时数据的完整性

问题描述

事件中应包含哪些数据?只有特定于此事件的数据或来自边界上下文的一些数据。

例如。我有accountwithdomainname属性

account(id, name, domain)

当我更改帐户时name NameChanged(id, name),会创建事件。但是当这个事件用于read side projection(cassandra db)时,我需要填写两个表(示例不使用物化视图):

accounts(id, name, domain) (primary key only `id`)
accountsByDomain(domain, id, name) (primary key contains `domain` and `id`)

第二个表无法同步name,因为 wheredomain事件中没有。

问题:事件必须尽可能简单(并调用实体的状态以获取在事件发生时可能不同的信息),或者它必须具有完整的信息read side projection

标签: domain-driven-designcqrs

解决方案


我们通常不限于单独处理一个事件——事件中的标识符可以让我们查找我们需要的其他信息(例如,这些信息可以包含在同一流中的其他事件中)。

回顾 Greg Young 关于Polyglot Data的演讲可能有助于澄清这个想法。


推荐阅读