parent-child Axon Framework 中如何管理聚合关系
How are parent-child aggregate relationships managed in Axon Framework
来自 parent 的 Axon 文档 describes how to create a child aggregate,但不是如何检索或删除它(例如级联删除)
parent 聚合 typically-explicitly 或 automatically-internally 是否保留对 child 聚合的引用列表?
此类引用是否是聚合 ID 的集合,或者,更面向 object,是对 child 聚合的实际实例引用的集合?
提出这个问题的另一种方式:child 聚合体与 multi-entity 聚合体中的实体有何不同,child 聚合体与完全独立的聚合体有何不同?
我想要 parent 和 child 之间的级联删除(包含)模型,但我想要单独并发访问非常大的 child object集合,因此聚合成员实体不是 suitable.
另请注意 a similar question in the forum:OP,Jakob 在最后描述了一个模型,其中包括他自己的 table 管理级联引用...我需要那个吗?
如果您要求实体是单独的聚合,那么您将需要维护从 parent 到 child 的引用 table。
Axon 提供的从 parent 聚合创建 child 聚合的支持是为了确保框架使用单个事务来发布多个事件。 Axon Framework 绝不会自动为您存储关系。
相反,所有这些都应该在聚合的事件流中已知。考虑到这一点,结合事件溯源,您可以在聚合中获取任何形式的数据。
回到你的级联删除场景:我实际上已经就此事与 Jakob 直接联系。在他的情况下(可能还有你的情况),我们最终得到了一个 `aggregateId-to-childAggregateIds 模型,专门用于保存引用。从 parent 聚合(在任何级别)中删除时,将引用此模型,确保也删除正确的 children 集。请注意,所有这些都是自定义代码。
此外,这个 aggregateId-to-childAggregateIds
模型可以被视为您的命令模型的一部分(前提是您的目标是应用 CQRS)。因此,它纯粹用于驱动 decision-making。在这种情况下,decision-making 决定向 children 发送删除命令。
所以,总结一下:
- Axon 不会为您保留 parent-child 关系,除了在您发布的活动内容中。
- 我会选择
aggregateId-to-childAggregateIds
模型 从不 存储整个聚合实例。您根本不需要所有数据来决定删除谁。 child 的聚合标识符应该足够了。
- Axon 的 child 聚合创建支持纯粹是为了使用针对事件存储的单个事务来发布 parent 的更改和 child 的创建,同时仍然受益于单独的实例以提高并发性。 Axon 的聚合成员支持会将 children 标记为 parent 聚合根下的实体,而不是它们自己的聚合实例。
来自 parent 的 Axon 文档 describes how to create a child aggregate,但不是如何检索或删除它(例如级联删除)
parent 聚合 typically-explicitly 或 automatically-internally 是否保留对 child 聚合的引用列表? 此类引用是否是聚合 ID 的集合,或者,更面向 object,是对 child 聚合的实际实例引用的集合?
提出这个问题的另一种方式:child 聚合体与 multi-entity 聚合体中的实体有何不同,child 聚合体与完全独立的聚合体有何不同?
我想要 parent 和 child 之间的级联删除(包含)模型,但我想要单独并发访问非常大的 child object集合,因此聚合成员实体不是 suitable.
另请注意 a similar question in the forum:OP,Jakob 在最后描述了一个模型,其中包括他自己的 table 管理级联引用...我需要那个吗?
如果您要求实体是单独的聚合,那么您将需要维护从 parent 到 child 的引用 table。
Axon 提供的从 parent 聚合创建 child 聚合的支持是为了确保框架使用单个事务来发布多个事件。 Axon Framework 绝不会自动为您存储关系。
相反,所有这些都应该在聚合的事件流中已知。考虑到这一点,结合事件溯源,您可以在聚合中获取任何形式的数据。
回到你的级联删除场景:我实际上已经就此事与 Jakob 直接联系。在他的情况下(可能还有你的情况),我们最终得到了一个 `aggregateId-to-childAggregateIds 模型,专门用于保存引用。从 parent 聚合(在任何级别)中删除时,将引用此模型,确保也删除正确的 children 集。请注意,所有这些都是自定义代码。
此外,这个 aggregateId-to-childAggregateIds
模型可以被视为您的命令模型的一部分(前提是您的目标是应用 CQRS)。因此,它纯粹用于驱动 decision-making。在这种情况下,decision-making 决定向 children 发送删除命令。
所以,总结一下:
- Axon 不会为您保留 parent-child 关系,除了在您发布的活动内容中。
- 我会选择
aggregateId-to-childAggregateIds
模型 从不 存储整个聚合实例。您根本不需要所有数据来决定删除谁。 child 的聚合标识符应该足够了。 - Axon 的 child 聚合创建支持纯粹是为了使用针对事件存储的单个事务来发布 parent 的更改和 child 的创建,同时仍然受益于单独的实例以提高并发性。 Axon 的聚合成员支持会将 children 标记为 parent 聚合根下的实体,而不是它们自己的聚合实例。