【发布时间】:2018-11-01 16:47:05
【问题描述】:
我有Application 聚合,它可以处理命令,例如Register、Install >、卸载、隐藏、显示、ChangeOwner、发布、 CancelPublication...Application aggregate 中有大约 20 个命令。每个 command 检查 Application 的不变量,例如 Application 可以是:
- 在名称、描述和其他详细信息有效时发布,
- 隐藏仅在发布时,
- 安装不是由所有者以及在它发布之后,
- PublicationCanceled 当没有安装时...
应用程序在命令有效时生成相应的事件。 事件由projections和流程管理器处理。
我有 Application 和 Statistics projection - 他们处理来自 Application 聚合 的事件>,两个 projections 都是 100% 基于 events,因此 projections 可以完全删除并从头开始重建。 Application 和 Statistics projections 由用户通过 http:get endpoint
请求问题:
现在我有一个来自业务分析的请求,以跟踪潜在客户何时打开应用程序。通过打开,他们了解潜在客户会看到应用程序 预测详细信息,例如(名称、描述、价格、功能、优势、安装数量、评论。 ..)。
现在我想知道是否允许我在 Application 聚合 中创建 Open 命令。它不会改变聚合状态,不变量与它无关。由于统计预测,才需要此命令。
另外的问题是,一些应用程序每天可能会被访问数百次,因此当聚合被处理时,它会产生大量的事件来处理加载到内存中。
您是否认为在 Application 聚合中创建 Open command 以发出 Opened 事件 是解决这个问题的好方法吗?
【问题讨论】:
-
看起来你必须决定这只是一个访问控制的东西还是真正的域功能......那么也许在另一个有界上下文中?
-
谢谢,这似乎是 Analytics BC 的责任,但 Opened 事件可能有助于应用程序聚合中的应用程序评分算法 - 在这个阶段很难说。
标签: events domain-driven-design cqrs event-sourcing aggregateroot