步骤 1. 选择应用上下文
首先,您需要定义 bounded context 及其领域实体。用这种方式,您将定义AggregateRoot(例如,订单,诊所访问或旅行)。根据 Axon 框架网站,aggregate root 是始终处于一致状态的一个实体或一组实体,aggregate root是aggregate tree顶端的对象,负责维护一致状态。
在我的例子中,bounded context是(非常简化的)在线植物商店的购物车。与任何在线购物车一样,使用此购物车的购物者可以添加商品,删除商品,清空购物车,查看购物车中的商品,并在购物完成后进行结帐。
图 2. 购物车聚合对象
- Shopping cart: 领域模型的聚合根。包含命令处理器来操作命令并生成对应的事件
- Command: 每个命令只有一个对应的命令处理器
- Event:每个命令可能生成零,一或者多个类型的事件
注意: aggregate root 通常通过它的 AggregateIdentifier 来识别:
public class ShoppingCart extends AbstractAnnotatedAggregateRoot {
@AggregateIdentifier
private String id;
public ShoppingCart() {
}
//…..
}
在 Spring 配置中, 我将 aggregate root 对象 (ShoppingCart) 连接到它的 command bus 和 event repository:
<axon:aggregate-command-handler id="ShoppingCartHandler"
aggregate-type="cqrs.example.shoppingcart.model.ShoppingCart"
repository="shoppingCartRepository"
command-bus="commandBus" />