我有这个问题已经很久了。对于互联网上的大多数样本。他们总是先创建一个聚合对象,然后再操作聚合对象。我的问题是,除了每次都创建一个之外,我怎么能从db中加载一个。我以e-sopping为例。我把一个产品当作一个聚合对象。我不能把所有的产品都加载到我的程序内存中。那我怎么做呢?
我所做的是,我写了另一个参数为UpdateProductCommand的构造函数,以及参数为CreateProductCommand的构造函数。在这个构造函数中,我从db中加载它,这样可以吗?
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));
}
}
我假设你想使用 状态存储总量 你可以查看链接了解更多信息。
为了给你一些帮助,我必须看看你在哪个字段上标有 @Id
和 @AggregateIdentifier
但假设你有一个 String id
(这是你的 command.id
和 @TargetAggregateIdentifier
以及),Axon负责根据该字段从数据库中加载Aggregate。说了这么多,你不必自己去处理,只需要关注你的业务逻辑(也就是验证),并在需要的时候应用新的值。