CQRS + ES:对于汇总而言无关的命令/事件,但对于投影而言很重要

时间:2018-10-19 09:25:41

标签: events domain-driven-design cqrs event-sourcing aggregateroot

我有应用 聚合,它可以处理命令,如注册安装 >,卸载隐藏显示 ChangeOwner 发布 CancelPublication ...... 应用程序 聚合中大约有20个命令。每个命令检查 Application 的不变量,例如 Application 可以是:

  • 已发布,当名称,说明和其他详细信息有效时,
  • 隐藏,仅当已发布
  • 已安装,不是由所有者安装的,而是在发布
  • 没有安装时
  • 已取消发布 ...
命令有效时,

应用会生成相应的事件事件投影流程管理器处理。

我有应用统计 投影-他们处理来自应用 汇总,两个 projections 都是基于 events 的100%,因此 projections 可以完全删除并从头开始重建。用户通过 http:get端点

请求应用统计 投影

问题

现在,我收到业务分析的请求,以跟踪潜在客户打开的应用程序的时间。通过打开,他们了解潜在客户会看到应用 投影详细信息,例如(名称,描述,价格,功能,优势,安装数量,评论。 ..)。

现在,我想知道是否可以在应用程序 聚合中创建 Open 命令。它不会改变 aggregate 状态,不变性与此无关。由于统计信息投影,仅需要此命令

另一个问题是每天可能会访问数百次应用,因此当 aggregate 被设置时,它会产生大量的事件来处理。加载到内存中。

您是否认为在应用程序中创建打开 命令以便发出 Opened 事件是解决此问题的好方法吗?

1 个答案:

答案 0 :(得分:2)

应用汇总可以拒绝 Open 命令吗? 如果不能,那真的是命令吗?

如果聚合的当前状态不允许执行该命令,我们将向聚合发出命令以验证它们,并可能拒绝它们。

如果不能拒绝 Open 命令,并且您仍然决心通过事件解决用户跟踪,则可以考虑简单地发出 ApplicationOpened 事件,而不发出汇总命令。

另一种选择可能是完全跟踪另一个系统中的用户操作和统计信息,也许只是向数据库表中添加行。