domain-driven-design - 使用 DDD CQRS 时数据的完整性
问题描述
事件中应包含哪些数据?只有特定于此事件的数据或来自边界上下文的一些数据。
例如。我有account
withdomain
和name
属性
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
解决方案
我们通常不限于单独处理一个事件——事件中的标识符可以让我们查找我们需要的其他信息(例如,这些信息可以包含在同一流中的其他事件中)。
回顾 Greg Young 关于Polyglot Data的演讲可能有助于澄清这个想法。
推荐阅读
- c# - 当前不支持“Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSql”方法
- reactjs - 与使用 jest 和 materialUi 组件测试我的组件 React 测试库相关
- r - `table`未以矩阵格式显示
- python - 使用 Azure DevOps API 更新 TFS/Azure DevOps 测试用例步骤结果
- c# - 使用绘画方法在表单上创建运动 - 不起作用
- c# - VirusTotal 上传的文件为零字节
- jboss - Keycloak 不为事件发送电子邮件
- javascript - 如果我从 3 到 1 选项卡单击,选定的单选按钮答案类将被删除。但是对于直接邻居来说工作正常吗?
- javascript - 通过带有 formData 的 fetch 向 Nodejs 服务器发送文件返回 req.files null
- mysql - 续集迁移文件:添加 createdAt 和 updatedAt 列