首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Axon框架中管理父-子聚合关系?

如何在Axon框架中管理父-子聚合关系?
EN

Stack Overflow用户
提问于 2022-01-24 18:56:22
回答 1查看 282关注 0票数 0

来自父级的子集合文档,但不是如何检索或删除它(例如,用于级联删除)

父聚合通常是显式的还是自动地在内部保留对子聚合的引用列表?这些引用是聚合ID的集合,还是更面向对象的对子聚合的实例引用的集合?

提出这个问题的另一种方法是:在多实体聚合中,子聚合与实体有什么不同,子聚合与完全独立的聚合有什么不同?

我想要父级和子级之间的级联删除(包含)模型,但是我希望在一个非常大的集合中单独并发访问子对象,因此聚合成员实体是不合适的。

还请注意论坛上类似的问题:OP,Jakob在最后描述了一个模型,其中包括他自己管理级联引用的表。我需要那个吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-25 10:28:26

如果要求实体是单独的集合,则需要从父级到子级维护引用表。

Axon提供的从父聚合创建子集合的支持是为了确保框架使用单个事务来发布多个事件。Axon绝不自动为您存储关系。

相反,所有这些都应该在Aggregates的事件流中知道。考虑到这一点,结合事件源,您可以在Aggregates中获取任何形式的数据。

回到级联删除场景:我实际上已经就此事与Jakob进行了直接接触。在他的例子(可能也是你的例子)中,我们最终得到了一个“聚合到孩子的集合”模型,该模型专门用于保留引用。在从父聚合中删除时(在任何级别上),都会引用此模型,以确保删除正确的子集合。注意,所有这些都是自定义代码。

此外,这个aggregateId-to-childAggregateIds模型可以被看作是命令模型的一部分(假设您的目标是应用CQRS)。因此,它纯粹是用来推动决策的。在这种情况下,决策是决定向哪个子节点发送删除命令。

因此,概括地说:

  • 除了发布的事件的内容之外,Axon不为您保留父-子关系。
  • 我会选择aggregateId-to-childAggregateIds模型为,而不是存储整个聚合实例。你根本不需要所有的数据来决定删除谁。子程序的聚合标识符应该足够了。
  • Axon的子聚合创建支持纯粹是为了使用单个事务对事件存储发布父级更改和创建子级,同时仍然受益于单独的实例以提高并发性。Axon的聚合成员支持将子实体标记为父聚合根下的实体,而不是它们自己的聚合实例。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70839046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档