【问题标题】:Axon Framework: Delete Aggregate RootAxon 框架:删除聚合根
【发布时间】:2020-01-11 14:10:46
【问题描述】:

老实说,我不知道从哪里开始。存储库方面相对简单,但我似乎找不到任何有关如何通过 CommandGateway 删除聚合根的信息。

任何有关如何实现此目标的说明和/或文档将不胜感激。

【问题讨论】:

  • 您使用事件源聚合还是状态存储聚合?请注意,无论哪种情况,CommandGateway 都与此无关,因为它只是调度命令消息的 API。
  • 我正在使用事件源聚合。我所做的挖掘让我相信我需要实现一个存储库,允许我使用聚合 id 直接删除 DomainEventEntry。这样做是否可取?
  • 对其他评论表示歉意。进一步的研究表明存在 markDeleted() - 我认为这保留了导致聚合被“删除”的事件的历史,并且是使用事件溯源时的首选机制?
  • 没错。使用事件溯源,“删除”实际上并不存在。它只是一个和其他任何状态一样的状态,除了在“已删除”状态下,所有命令都被拒绝。
  • 感谢您抽出时间 Allard,非常感谢。

标签: axon


【解决方案1】:

把它放在这里以供其他可能像我最初一样迷失的人将来参考。

使用事件溯源聚合时,可以在相关聚合上使用 markDeleted() 静态方法。我把我的放在@EventSourcingHandler

import static org.axonframework.modelling.command.AggregateLifecycle.markDeleted;

@EventSourcingHandler
public void on(DeletedEvent event){
    markDeleted();
}

更多信息请访问:https://docs.axoniq.io/reference-guide/implementing-domain-logic/command-handling/aggregate#aggregate-lifecycle-operations

要删除与聚合关联的视图数据,我使用了外部@EventHandler:

@EventHandler
public void on(DeletedEvent event, ReplayStatus status){
    entityRepo.deleteById(event.getId());
}

感谢 Allard 让我参与 cmets 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多