首页 > 解决方案 > CQRS+ES:对聚合无关的命令/事件,但对投影很重要

问题描述

我有Application 聚合,它可以处理RegisterInstallUninstallHideShowChangeOwnerPublishCancelPublication命令...... Application聚合中大约有 20 个命令。每个命令检查 Application 的不变量,例如Application可以是:

命令有效时,应用程序会生成相应的事件。事件预测流程管理器处理。

我有ApplicationStatistics 投影- 它们处理来自Application aggregate的事件,两个预测都是 100% 基于events,因此可以完全删除投影并从头开始重建。用户通过http:get 端点请求应用程序统计信息 预测

问题

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

现在我想知道是否允许我在Application aggregate创建Open命令。它不会改变聚合状态,不变量与它无关。由于统计预测,才需要此命令

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

您认为在Application聚合中创建Open 命令以发出Opened事件是解决此问题的好方法吗?

标签: eventsdomain-driven-designcqrsevent-sourcingaggregateroot

解决方案


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

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

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

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


推荐阅读