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 可以是:
- 已发布 当名称、描述和其他详细信息有效时,
- 隐藏仅当发布,
- 安装 不是由所有者安装,是在 发布、
之后
- PublicationCanceled 当没有安装时...
Application 在 commands 有效时生成相应的 events。 事件 由预测 和流程管理器.
处理
我有 Application 和 Statistics projection - 它们处理来自 Application aggregate,两个 projections 都是 100% 基于 events,所以投影 可以完全删除并从头开始重建。 Application 和 Statistics 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。
我有 Application aggregate,它可以像 一样处理 commands注册、安装、卸载、隐藏、显示, ChangeOwner, Publish, CancelPublication...大约有 20 commands in Application aggregate。每个 command 检查 Application 的不变量,例如 Application 可以是:
- 已发布 当名称、描述和其他详细信息有效时,
- 隐藏仅当发布,
- 安装 不是由所有者安装,是在 发布、 之后
- PublicationCanceled 当没有安装时...
Application 在 commands 有效时生成相应的 events。 事件 由预测 和流程管理器.
处理我有 Application 和 Statistics projection - 它们处理来自 Application aggregate,两个 projections 都是 100% 基于 events,所以投影 可以完全删除并从头开始重建。 Application 和 Statistics 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。