Axon的命令和事件模型侧重于定义系统的行为,因此它们通常更加精简。由于这种简单性,它们很容易被视为贫血模型。当模型变得过于简单时,通常需要将行为和状态捆绑起来,以避免被认为是贫血模型。
以下是一个使用Axon的命令和事件模型的示例:
@CommandHandler
public void handle(CreateUserCommand createCommand) {
User user = new User(createCommand.getName(), createCommand.getAge());
userRepository.save(user);
UserCreatedEvent event = new UserCreatedEvent(user.getId(), user.getName(), user.getAge());
eventBus.publish(asEventMessage(event));
}
@EventHandler
public void on(UserCreatedEvent event) {
// Do something with the user created event
}
在这个例子中,CreateUserCommand
是一个包含创建用户所需信息的简单命令。在handle
方法中,我们使用该命令创建了一个用户。然后,我们创建了一个包含有关所创建用户的详细信息的UserCreatedEvent
。最后,我们使用事件总线将该事件发布到系统中。
在on
方法中,我们定义了如何处理UserCreatedEvent
。在此示例中,我们只是简单地记录事件,但通常情况下,您可能会更新应用程序状态,刷新传统的查询模型等等。