【发布时间】:2021-12-31 20:28:15
【问题描述】:
在Axon Framework 中,如果我在聚合中有实体,谁负责将实体保存到数据库中?假设我有根聚合名称库和库聚合根保存书籍实体。 每本书都是一个需要持久化的实体。谁使用 Axon 持久化 book 实体?是程序员的责任还是框架本身?
例如,我想向图书馆添加新书,所以我有 addNewBook 命令被图书馆聚合拦截,但我如何保存新书实体以及保存到哪里
【问题讨论】:
标签: spring-boot axon
在Axon Framework 中,如果我在聚合中有实体,谁负责将实体保存到数据库中?假设我有根聚合名称库和库聚合根保存书籍实体。 每本书都是一个需要持久化的实体。谁使用 Axon 持久化 book 实体?是程序员的责任还是框架本身?
例如,我想向图书馆添加新书,所以我有 addNewBook 命令被图书馆聚合拦截,但我如何保存新书实体以及保存到哪里
【问题讨论】:
标签: spring-boot axon
您的描述中缺少的是您是选择使用事件溯源还是状态存储聚合。
Axon 框架偏向于事件溯源,因此默认情况下,您的聚合每次都会根据实例发布的事件重新创建。这就是base page on Aggregate in the Reference Guide 显示事件溯源处理程序用法的原因。
此外,如果您正在执行事件溯源,则完全不必担心聚合或聚合成员在其中的持久性。只要您有一个事件存储,事件就会被维护。通过这些事件,Axon 可以随时重新创建聚合(及其聚合成员)。
但是,如果您决定不使用事件溯源,则剩下的唯一选择就是使用 State-Stored Aggregate。如果这是您为应用程序选择的,那么您所要做的就是确保:
@Entity 注释类。@Entity 注释类的一部分。因此,您不必担心检索或存储聚合。 Axon 会解决这个问题。
【讨论】:
@AggregateMember 注释字段。当然,这些字段都设置在 @EventSourcingHandler 带注释的方法中。当聚合源自其事件时,仅调用这些方法。