如何在 AxonFramework 或任何其他事件源框架中从数据库加载聚合对象?

How do I load an aggregate object from db in AxonFramework or any other Event-Sourcing frameworks?

这个问题想了很久了。对于 Internet 上的大多数示例。他们总是先创建一个聚合对象,然后再操作聚合对象。我的问题是,除了每次都创建一个之外,我如何从数据库加载一个。我将以电子浸泡为例。我将一个产品视为一个聚合对象。我无法将它们全部加载到我的程序内存中。那我该怎么办?

我所做的是,我编写了另一个带有参数 UpdateProductCommand 的构造函数以及带有参数 CreateProductCommand 的构造函数。在这个构造函数中,我从 db.Is 加载它 OK?

class Product{

    public Product(){}

    @CommandHandler
    public Product(CreateProductCommand command){
        apply(new CreateProductEvent(command.id));
    }

    @CommandHandler
    public Product(UpdateProductCommand command){
        load(command.id)
        ...
        apply(new UpdateProductEvent(command.id));
    }
}

我假设您想使用 State-Stored Aggregates,您可以查看 link 了解更多信息。

为了给你一些启发,我必须看看你用 @Id@AggregateIdentifier 标记了哪个字段,但假设你有一个 String id(这是你的 command.id@TargetAggregateIdentifier),Axon 负责根据该字段从数据库加载聚合。话虽如此,您不必自己处理,只需关注您的业务逻辑(即验证)并在需要时应用新值。