【发布时间】:2019-08-09 13:30:18
【问题描述】:
我正在尝试在事件存储中构建关系。我是事件外包的新手,所以请多多包涵。 :-)
应该如何在事件存储中映射关系?你能给我一些建议吗?
想象一下,我有一个关于项目管理的领域。我有一个聚合,它是Project。 Project 聚合根 包含Tasks、Documents、Files、Folders,它们是Project 中核心实体的集合。
我还有一个ProjectBranch,它可以是Project 聚合的一部分,但也可以单独查看。在ProjectBranch 中可以更改前面提到的集合,并且可以将ProjectBranch 再次合并到Project 中,从而更新Project 的集合。
某些流程类似于 VCS 系统。
应该如何映射这些关系以及我应该创建聚合和聚合根的哪种分离?
如果 Project 是唯一的聚合,则事件(我想)如下所示:
- ProjectWasCreated [聚合]
- ProjectDocumentWasCreated
- ProjectTaskWasCreated
- ProjectBranchWasCreated
- ProjectBranchDocumentWasCreated
(这个事件如何知道文档属于哪个分支)
一旦 ProjectBranchWasMergedToProject 事件发生,ProjectBranch 中发生的所有事件都必须以某种方式在项目上重播。
另一方面,可能会有一个更相关的结构,其中有几个单独的聚合 - 例如Project、ProjectBranch、Task、Document 等等。
这意味着域有一组不同的事件,如下所示:
- ProjectWasCreated [聚合]
- DocumentWasCreated [聚合]
- ProjectDocumentWasAttached(documentId)
- ProjectBranchWasCreated(projectId) [聚合]
- DocumentWasCreated [聚合]
- ProjectBranchDocumentWasAttached(documentId)
其中一些功能可能需要在Project 之外独立工作,因此它们将被制成独立模块。
谢谢:-)
【问题讨论】:
标签: events domain-driven-design aggregate relationship event-sourcing