Axon Framework中使用了聚合根的概念来管理业务实体。而在某些业务场景下,一个聚合根可能会包含其他聚合根作为其子聚合根,这种关系被称为父子关系。同时,父子关系也是一种常见的业务需求,在实际项目中非常常见。因此,Axon Framework提供了一种特殊的聚合根类型,即AbstractAnnotatedAggregateRoot,可以方便地管理父子关系。具体实现方法如下:
public abstract class ParentAggregateRoot extends AbstractAnnotatedAggregateRoot {
private final List children = new ArrayList<>();
protected void publishAndApply(E event) {
apply(event);
applyToChildren(event);
}
protected void addChild(T child) {
children.add(child);
}
protected void applyToChildren(DomainEvent event) {
children.forEach(child -> {
child.apply(event);
});
}
}
public class ChildAggregateRoot extends AbstractAnnotatedAggregateRoot {
private final String name;
public ChildAggregateRoot(String name) {
this.name = name;
}
// 子聚合根的业务方法
}
public class ExampleCommandHandler {
@CommandHandler
public void handle(Create