将CQRS应用于示例工作流程

时间:2013-07-03 20:48:32

标签: domain-driven-design cqrs

假设我有一个使用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在哪里发挥作用(我将如何处理给定的故事)?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

命令处理程序通常将行为委托给它使用存储库加载的聚合根。反过来,聚合根会根据调用的操作引发事件,例如TaskCreatedEvent。有各种各样的事件处理程序。您可以拥有一个事件处理程序,其唯一的工作就是将已发布的事件分派给外部系统。外部系统将使用事件处理程序订阅已发布的事件,该事件处理程序通常会调用命令来响应事件。事件处理程序还可用于调用其他域逻辑以响应本地上下文中的事件。