Events CQRS+;ES:与聚合无关的命令/事件,但对投影很重要

Events CQRS+;ES:与聚合无关的命令/事件,但对投影很重要,events,domain-driven-design,cqrs,event-sourcing,aggregateroot,Events,Domain Driven Design,Cqrs,Event Sourcing,Aggregateroot,我有应用程序聚合,它可以处理注册,安装,卸载,隐藏,显示,变更所有者,发布,取消发布。。。应用程序中大约有20个命令。每个命令检查应用程序的不变量,例如应用程序可以是: 发布当名称、描述和其他详细信息有效时 仅在发布时隐藏 不是由所有者安装的,而是在发布后安装的 发布已取消当没有安装时 应用程序在命令有效时生成相应的事件。事件由预测和流程经理处理 我有应用程序和统计投影-它们处理应用程序聚合中的事件,两个投影都是100%基于事件的,因此可以完全删除投影并从头开始重建应用程序和统计数据预测由用

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

  • 发布当名称、描述和其他详细信息有效时
  • 仅在发布时隐藏
  • 不是由所有者安装的,而是在发布后安装的
  • 发布已取消当没有安装时
应用程序在命令有效时生成相应的事件。事件由预测和流程经理处理

我有应用程序统计投影-它们处理应用程序聚合中的事件,两个投影都是100%基于事件的,因此可以完全删除投影并从头开始重建应用程序和统计数据
预测由用户通过http:get端点请求

问题

现在,我收到business analytics的一个请求,要求跟踪潜在客户何时打开应用程序。通过开始他们了解到潜在客户可以看到应用程序投影细节,如(名称、说明、价格、功能、优点、安装数量、评论…)

现在我想知道是否允许我在应用程序聚合中创建打开命令。它不会改变聚合状态,不变量与它无关。此命令仅因统计预测而需要

另一个问题是,一些应用程序可能每天被访问数百次,因此当聚合加载到内存中时,它可能会生成大量要处理的事件


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

应用程序
聚合能否拒绝打开命令? 如果不能,它真的是命令吗

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

如果不能拒绝<强> Open/<强>命令,并且仍然决定用事件来解决用户跟踪,则可以考虑简单地发布<强>应用程序打开事件,而不向聚合发出命令。


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

看起来您必须决定这是访问控制还是真正的域功能。。。也许是在另一个有限的上下文中?谢谢,这似乎是Analytics BC的责任,但Opened event可能有助于应用程序聚合中的应用程序评分算法-在这个阶段很难说。是的,Open命令可以被拒绝,即应用程序在未发布时无法打开。我已经解决了这个问题,将所有这些统计/分析内容转移到单独的BoundedContext中。无论如何,谢谢你对这个问题给予不同的看法。