Как загрузить агрегированный объект из базы данных в AxonFramework или любых других фреймворках Event-Sourcing? - PullRequest
0 голосов
/ 07 мая 2020

Вопрос у меня был давно. Для большинства образцов на Inte rnet. Они всегда сначала создают один совокупный объект, а затем управляют совокупными объектами. Мой вопрос в том, как я могу загрузить его из базы данных, кроме как создавать его каждый раз. В качестве примера я возьму e-sopping. Я отношусь к одному продукту как к совокупному объекту. Я не могу загрузить их все в память программ. Итак, как мне это сделать?

Я пишу другой конструктор с параметром UpdateProductCommand, а также конструктор с параметром CreateProductCommand. В этом конструкторе я загружаю его из базы данных. Это нормально?

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));
    }
}

1 Ответ

4 голосов
/ 07 мая 2020

Я предполагаю, что вы хотите использовать агрегаты с хранением в состоянии , и вы можете проверить ссылку для получения дополнительной информации.

Чтобы дать вам немного света, мне нужно посмотреть, какое поле Вы отметили @Id и @AggregateIdentifier, но если у вас есть один String id (который также является вашим command.id и @TargetAggregateIdentifier), Axon отвечает за загрузку агрегата из базы данных на основе этого поля. Сказав это, вам не нужно заботиться об этом самостоятельно, просто сосредоточьтесь на своей бизнес-логике c (что означает валидацию) и при необходимости примените новые значения.

...