Domain driven design 将CQR应用于示例工作流

Domain driven design 将CQR应用于示例工作流,domain-driven-design,cqrs,Domain Driven Design,Cqrs,假设我有一个使用CQRS范例的任务管理应用程序。我如何将其应用于以下方面: 场景:作为一个用户,我想创建一个任务 Java伪代码: interface Command {} class CreateTaskCommand implements Command { public String taskId; public String description; public boolean complete; } interface CommandHandler<C

假设我有一个使用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));
    }
}
给定上述代码,事件、EventHandler和聚合根在哪里起作用?对于给定的故事,我将如何继续


感谢您的帮助。

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

您的问题范围有点太广,您可能希望先阅读CQRS和DDD,然后提出问题,说明您到目前为止的代码以及存在的问题。对于CreateTaskCommand,我将使用存储库存储或添加任务聚合根,然后应用一个事件TaskCreatedEvent。repository.add任务;eventHandler.apply taskCreatedEvent;这是正确的方法吗?