CQRS模式问题

时间:2018-09-23 11:31:26

标签: domain-driven-design cqrs

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

示例任务:我将使用cron命令从不同的提供程序(不同的API)获取信息,并且此cron命令的职责是:

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

与CQRS相关的问题:

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

如果以上所有问题都正确,那么我可以这样做:

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

不要对我判断得很严格,我正在学习DDD和相关模式的概念。我只是问一些问题,我不清楚。非常感谢

1 个答案:

答案 0 :(得分:2)

  

我可以在一个系统请求中只有几个CQRS命令和查询吗?   在上面的示例中,我需要从数据库(查询)获取现有数据,   保留数据(命令)等等。

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

  

关于从API提取数据的逻辑,我可以将其视为   CQRS查询作为获取数据或CQRS查询的过程是   仅从内部存储而非外部获取数据的过程   API?

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

  

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

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

  

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

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

结论:

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