假设我有一个使用CQRS范例的任务管理应用程序。我将如何将其应用于以下内容:
场景:作为用户,我想创建一个任务。
Java伪代码:
interface Command {}
class CreateTaskCommand implements Command {
public String taskId;
public String description;
public boolean complete;
}
interface CommandHandler<Command> {
public void execute(Command command);
}
class CreateTaskHandler implements CommandHandler<CreateTaskCommand> {
public void execute(CreateTaskCommand cmd) {
validateTask(cmd);
repository.storeTask(new Task(cmd.taskId, cmd.description, cmd.complete));
}
}
鉴于上面的代码,Event,EventHandler和Aggregate Root在哪里发挥作用(我将如何处理给定的故事)?
感谢您的帮助。
答案 0 :(得分:2)
命令处理程序通常将行为委托给它使用存储库加载的聚合根。反过来,聚合根会根据调用的操作引发事件,例如TaskCreatedEvent
。有各种各样的事件处理程序。您可以拥有一个事件处理程序,其唯一的工作就是将已发布的事件分派给外部系统。外部系统将使用事件处理程序订阅已发布的事件,该事件处理程序通常会调用命令来响应事件。事件处理程序还可用于调用其他域逻辑以响应本地上下文中的事件。