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: