【问题标题】:Multi-Entity Aggregates Axon多实体聚合轴突
【发布时间】:2021-12-31 20:28:15
【问题描述】:

Axon Framework 中,如果我在聚合中有实体,谁负责将实体保存到数据库中?假设我有根聚合名称库和库聚合根保存书籍实体。 每本书都是一个需要持久化的实体。谁使用 Axon 持久化 book 实体?是程序员的责任还是框架本身?

例如,我想向图书馆添加新书,所以我有 addNewBook 命令被图书馆聚合拦截,但我如何保存新书实体以及保存到哪里

【问题讨论】:

    标签: spring-boot axon


    【解决方案1】:

    您的描述中缺少的是您是选择使用事件溯源还是状态存储聚合。

    Axon 框架偏向于事件溯源,因此默认情况下,您的聚合每次都会根据实例发布的事件重新创建。这就是base page on Aggregate in the Reference Guide 显示事件溯源处理程序用法的原因。

    此外,如果您正在执行事件溯源,则完全不必担心聚合或聚合成员在其中的持久性。只要您有一个事件存储,事件就会被维护。通过这些事件,Axon 可以随时重新创建聚合(及其聚合成员)。

    但是,如果您决定不使用事件溯源,则剩下的唯一选择就是使用 State-Stored Aggregate。如果这是您为应用程序选择的,那么您所要做的就是确保:

    1. Aggregate 是一个 @Entity 注释类。
    2. 您的聚合成员是每个常规实体构造的 @Entity 注释类的一部分。

    因此,您不必担心检索或存储聚合。 Axon 会解决这个问题。

    【讨论】:

    • 谢谢。我确实想使用事件溯源,这就是我不明白聚合的实体状态 ae 存储在哪里的原因。也是事件来源吗?
    • 好吧,很高兴知道这就是您要找的东西。答案很简短:是的,Axon 事件来源于整个聚合状态。因此,还包括@AggregateMember 注释字段。当然,这些字段都设置在 @EventSourcingHandler 带注释的方法中。当聚合源自其事件时,仅调用这些方法。
    • 我明白了。非常感谢。很棒的框架!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多