CQRS+ES:与聚合无关 Command/Event 但对投影很重要

CQRS+ES: irrelevant Command/Event for Aggregate but important for Projection

我有 Application aggregate,它可以像 一样处理 commands注册安装卸载隐藏显示, ChangeOwner, Publish, CancelPublication...大约有 20 commands in Application aggregate。每个 command 检查 Application 的不变量,例如 Application 可以是:

Applicationcommands 有效时生成相应的 events事件预测流程管理器.

处理

我有 ApplicationStatistics projection - 它们处理来自 Application aggregate,两个 projections 都是 100% 基于 events,所以投影 可以完全删除并从头开始重建。 ApplicationStatistics projections 由用户通过 http:get endpoint[= 请求94=]

问题:

现在,我收到来自业务分析的请求,以跟踪 Application 何时被潜在客户 Open。通过 Opening 他们了解到潜在客户会看到 Application projection 详细信息,例如(名称、描述、价格、功能、好处、安装次数、评论...)。

现在我想知道是否允许我在 Application aggregate 中创建 Open 命令。它不会改变 aggregate 状态,不变量与它无关。此 命令 只需要因为统计 projections.

另一个问题是某些 应用程序 可能每天被访问数百次,因此当 聚合 加载到内存中。

您认为在 Application 中创建 Open command 聚合是为了发出 Opened event 是解决这个问题的好方法吗?

Open 命令能否被 Application 聚合拒绝? 如果不能,那真的是命令吗?

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

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

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