Command Handler
在 axon 中,在 spring 下定义 Command Handler 非常简单,只要定义一个普通的 spring bean:
然后在这个 spring bean 的方法上加一个 @CommandHandler 的注解:
这个方法就可以扮演 Command Handler 的角色,而这个方法的参数就是对应的 Command 类型。
Command 处理流程
Command Handler 从 repository 中获取领域对象(Aggregates)并执行他们的方法来修改他们的状态。这些 Aggregates 通常包含实际的业务逻辑,同时也因此需要负责保护他们自己的不可变量。
以下是一个 CommandHandler 的工作代码,用来处理 DepositMoneyCommand 命令:
而在 BankAccount 中,deposit() 方法的实现,是发送一个 MoneyDepositedEvent 到 event bus: