【发布时间】:2019-05-10 07:55:37
【问题描述】:
我有一个关于 CQRS 架构上涉及多个聚合的预测的问题。
例如,假设我有两个聚合 WorkItem 和 Developer 并且以下事件顺序发生(但不是立即发生)
- WorkItemCreated (workItemId)
- WorkItemTitleChanged(workItemId,标题)
- DeveloperCreated (developerId)
- DeveloperNameChanged (developerId, name)
- WorkItemAssigned (workitemId, DeveloperId)
我希望创建一个作为 developer-workitem 的“内部连接”的投影:
| WorkItemId | DeveloperId | Title | DeveloperName | ... |
|------------|-------------|--------|---------------|-----|
| 1 | 1 | FixBug | John Doe | ... |
我进行预测的方式是渐进式的。这意味着我从数据库中加载保存的预测并应用剩余的事件。
我的问题是,负责在投影表上创建一行的事件是WorkItemAssigned。但是,该事件不包含以前事件的所需信息(工作项标题、开发人员名称等)
为了在WorkItemAssigned 之前获得所需的信息,我必须从事件存储中加载所有 事件,并将所有@987654327 的状态 保存在内存中@ 和 Developers 所以在 WorkItemAssigned 事件到达时我已经获得了所需的信息。
当然,我可以有一个Workitem 的投影,另一个Developer 的投影,并查询它们以检索它们的最后状态。但是看起来工作量很大,如果我要为每个聚合分别创建投影,我还不如创建一个数据库视图来inner-join它们(实际上,这就是我正在做的.)
我不是手动完成所有这些,我目前正在使用一个名为 EventFlow 的好框架,但它并没有指示我回答这个问题。
这是一个关于 CQRS 基础知识的问题,我觉得我在这里遗漏了一些东西。
【问题讨论】:
标签: cqrs event-sourcing