我有一个与多个聚合在CQRS架构中涉及的投影问题。例如,假设我有两个聚合“WorkItem”和“Developer”,并且按顺序发生以下事件(但不是立即):
1. WorkItemCreated(workItemId) 2. WorkItemTitleChanged(workItemId,title) 3. DeveloperCreated(developerId) 4. DeveloperNameChanged(developerId,name) 5. WorkItemAssigned(workitemId,DeveloperId)
我希望创建一个开发人员-工作项的“内连接”投影。
我做投影的方式是逐步进行的。这意味着我从数据库中加载已保存的投影,并在剩余事件到来时应用它们。
我的问题是,创建投影表行的事件是
为了在
当然,我可以为
我并不是手动完成所有这些操作,我目前正在使用一个很好的框架EventFlow,但它没有直接回答我的问题。
这是关于CQRS基础的问题,我觉得我在这方面缺少了一些东西。
1. WorkItemCreated(workItemId) 2. WorkItemTitleChanged(workItemId,title) 3. DeveloperCreated(developerId) 4. DeveloperNameChanged(developerId,name) 5. WorkItemAssigned(workitemId,DeveloperId)
我希望创建一个开发人员-工作项的“内连接”投影。
| WorkItemId | DeveloperId | Title | DeveloperName | ... |
|------------|-------------|--------|---------------|-----|
| 1 | 1 | FixBug | John Doe | ... |
我做投影的方式是逐步进行的。这意味着我从数据库中加载已保存的投影,并在剩余事件到来时应用它们。
我的问题是,创建投影表行的事件是
WorkItemAssigned
。然而,该事件不携带先前事件的必要信息(工作项标题、开发人员名称等)。为了在
WorkItemAssigned
到达时拥有所需的信息,我必须从事件存储库中加载所有事件,为所有WorkItems
和Developers
保留内存中的状态,以便在WorkItemAssigned
事件到达时拥有所需的信息。当然,我可以为
Workitem
和Developer
分别创建一个投影,并查询它们以检索它们的最新状态。但如果我要为每个聚合单独创建投影,我可能会创建一个数据库视图来内部连接它们(事实上,这就是我正在做的)。我并不是手动完成所有这些操作,我目前正在使用一个很好的框架EventFlow,但它没有直接回答我的问题。
这是关于CQRS基础的问题,我觉得我在这方面缺少了一些东西。