【问题标题】:Applying CQRS to a sample workflow将 CQRS 应用于示例工作流
【发布时间】:2013-07-03 20:48:32
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 您的问题范围太广了,您可能想先阅读 CQRS 和 DDD,然后提出问题,显示您目前拥有的代码以及您遇到问题的地方。

标签: domain-driven-design cqrs


【解决方案1】:

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

【讨论】:

  • 在 CreateTaskCommand 的情况下,我将使用存储库来存储或添加任务(聚合根),然后应用一个事件,TaskCreatedEvent。 repository.add(任务); eventHandler.apply (taskCreatedEvent);这是正确的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
相关资源
最近更新 更多