【问题标题】:CQRS pattern questionsCQRS 模式题
【发布时间】:2019-02-27 03:48:40
【问题描述】:

我正在学习 CQRS 模式,因为我们将在新项目中使用它。到目前为止,我有几个问题:

示例任务:我将使用 cron 命令从不同的提供者(不同的 API)获取信息,这个 cron 命令的职责是:

  1. 从所有提供的数据中获取数据;
  2. 进行额外的 API 调用以获取图像和视频;
  3. 处理这些视频和图像(存储到 aws s3)并上传到数据库中的表;
  4. 从数据库中获取现有数据;
  5. 将新的 API 数据转换为系统实体,更新现有实体并删除不存在的;
  6. 持久化数据库。 ;

CQRS 相关问题:

  1. 我可以在一个系统请求中包含少量 CQRS 命令和查询吗?在上面的示例中,我需要从数据库中获取现有数据(查询)、持久化数据(命令)等等。
  2. 从 API 获取数据的逻辑如何?我可以将其视为 CQRS 查询,因为它是获取数据的过程,还是 CQRS 查询是从内部存储而不是外部 API 获取数据的唯一过程?
  3. 关于将视频存储到s3并将信息存储到uploads表的过程如何,我可以将资产存储到S3的过程视为CQRS命令,该命令将返回我稍后需要存储的数据以进行上传吗?我不想立即存储它,因为上传实体是聚合的一部分以存储主要信息,其中主要信息实体是主要聚合实体。我知道命令应该不返回任何内容或实体 ID,但在这里它将返回有关商店资产的所有数据

如果以上所有问题都是真的,那么我可以:

  1. 查询以获取 API 数据
  2. 查询以获取现有数据
  3. 处理图像/视频的命令
  4. 插入/更新/删除数据的命令

不要对我评价太严格,我正在学习 DDD 和相关模式的概念。我只是问我不清楚的问题。非常感谢

【问题讨论】:

    标签: domain-driven-design cqrs


    【解决方案1】:

    我可以在一个系统请求中包含少量 CQRS 命令和查询吗? 在上面的示例中,我需要从数据库(查询)中获取现有数据, 持久化数据(命令)等等。

    不,你不能。每个请求要么是一个命令,要么是一个查询。

    从 API 获取数据的逻辑是什么?我可以将其视为 一个 CQRS 查询作为其获取数据的过程或 CQRS 查询它是 仅从内部存储获取数据的过程,而不是从外部存储获取数据的过程 API?

    命令和查询引用本地数据库。通过远程 API 从外部服务获取数据是与另一个 BC 的集成(请参阅 DDD 上下文映射模式)。

    把视频存到s3和存储信息的过程怎么样 要上传表,我可以考虑将资产存储到 S3 的过程吗 作为 CQRS 命令,此命令将返回我需要存储的数据 稍后再上传?

    将视频存储到 s3 不是命令,而是与外部服务的集成。您将不得不集成(再次使用上下文映射模式)。

    我不想立即存储它,因为上传实体是 聚合以存储主要信息,其中主要信息实体是主要的 聚合实体。

    我不知道您的域模型,但如果上传是聚合中的子实体,那么将内容存储在您的上传表中也不是命令。命令指的是聚合。在上传表中存储信息将是命令的一部分。

    作为一个结论:

    命令或查询是应用层边界(应用服务)的事务操作。他们处理来自您的数据库的数据。每个命令/查询都是一个事务。

    【讨论】:

    • CQRS 和事件溯源到底是什么?如果我提出问题,你会回答吗?我担心人们可能会投反对票。
    • @Mahima 这是一个宽泛的问题。不久,CQRS 将拆分命令和查询,即写入和读取端。事件溯源将事件视为源,即您将发生的事件存储在数据上,而不是数据状态。然后运行您构建状态的事件。命令生成存储的事件。查询读取事件生成的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2012-02-07
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多