Domain driven design 命令accros使用CQR和ES进行多个聚合

Domain driven design 命令accros使用CQR和ES进行多个聚合,domain-driven-design,backend,cqrs,eventsource,eventstoredb,Domain Driven Design,Backend,Cqrs,Eventsource,Eventstoredb,我在考虑解决问题的办法时遇到了一个奇怪的情况 简要回顾一下:我正在使用一个事件存储和CQR,我有两个聚合,分别称为“组”和“用户” 基本上,用户定义了一些特征,比如他的地区、年龄和一些兴趣 然后,他可以选择与同一地区、年龄和兴趣相同的群体“匹配” 现在情况是这样的:“配对”部分应该完全发生在后端,这可能是一个长时间运行的过程,但对于客户端来说,只需对端点进行一次调用,最终结果应该是他与一个组匹配 所以对于这种情况,我必须查询具有相同区域、相同年龄段的组,兴趣在我的查询中并不重要。我知道我们有一个

我在考虑解决问题的办法时遇到了一个奇怪的情况

简要回顾一下:我正在使用一个事件存储和CQR,我有两个聚合,分别称为“组”和“用户”

基本上,用户定义了一些特征,比如他的地区、年龄和一些兴趣

然后,他可以选择与同一地区、年龄和兴趣相同的群体“匹配”

现在情况是这样的:“配对”部分应该完全发生在后端,这可能是一个长时间运行的过程,但对于客户端来说,只需对端点进行一次调用,最终结果应该是他与一个组匹配

所以对于这种情况,我必须查询具有相同区域、相同年龄段的组,兴趣在我的查询中并不重要。我知道我们有一个组列表,媒人会根据组和用户之间的共同兴趣给每个组打分。评分最高的小组将加入

同样,使用CQR和ES,我的问题是这种情况似乎是查询和命令之间的混合,而将查询混合到匹配命令中似乎违背了CQR的目的

查询多个组并根据我的写端(事件存储)对它们进行过滤也是一个坏主意,因为在能够过滤出它们之前,必须重新构建聚合并将其加载到内存中

所以我:我有点被困在这里,有东西告诉我,一个长时间运行的流程/传奇可以解决我的问题,但我不知道我怎么能不打破传奇中查询和命令的混合,因为传奇基本上是一个命令/事件链


我如何处理这个具体案例?不需要真正的代码,一个让我开始的概念性解决方案是完美的。

嗨,这实际上是一个CQR可以大放异彩的案例

在这种情况下,创建一个专用的匹配模型似乎是理想的选择,它允许以其他形式回答一个可能非常重要的查询

所以

  • 创建一个专用(可能是短暂的,可能是检查点/持久的)查询模型作为派生存储
  • 根据请求运行查询以获取最匹配项
  • 根据查询结果发送命令,用新链接更新事件存储
  • 查询模型不需要管理命令,可以从事件存储区推送更新。这将使它的构建和更新变得相当简单,并且可以进一步优化,使其仅具有此特定查询所需的数据

    内存中的图形可能会做得很好

    -克里斯

    p、 美国

    在命令端:这里的每个命令只更新一个聚合实例

    进一步使用预写模式将允许不需要任何类型的流程管理器或“传奇”

    e、 g

    对于每个新成员身份,1个命令将新成员身份添加到用户流中,然后1个命令将新成员信息添加到组中。然后,一个简单的审核过程可以在启动/恢复时以及作为定期数据质量检查扫描不完整的成员分配


    -Chris

    嗨,这实际上是一个CQR可以发光的案例

    在这种情况下,创建一个专用的匹配模型似乎是理想的选择,它允许以其他形式回答一个可能非常重要的查询

    所以

  • 创建一个专用(可能是短暂的,可能是检查点/持久的)查询模型作为派生存储
  • 根据请求运行查询以获取最匹配项
  • 根据查询结果发送命令,用新链接更新事件存储
  • 查询模型不需要管理命令,可以从事件存储区推送更新。这将使它的构建和更新变得相当简单,并且可以进一步优化,使其仅具有此特定查询所需的数据

    内存中的图形可能会做得很好

    -克里斯

    p、 美国

    在命令端:这里的每个命令只更新一个聚合实例

    进一步使用预写模式将允许不需要任何类型的流程管理器或“传奇”

    e、 g

    对于每个新成员身份,1个命令将新成员身份添加到用户流中,然后1个命令将新成员信息添加到组中。然后,一个简单的审核过程可以在启动/恢复时以及作为定期数据质量检查扫描不完整的成员分配

    -Chris

    一个用于或软件工程松弛?一个用于或软件工程松弛?