当前位置 : 主页 > 手机开发 > 其它 >

域驱动设计 – 没有DDD的CQRS事件采购

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在建立一个非常以数据为中心的系统.我有大型的分层数据集,但没有业务规则.系统的输出来自对数据和一些报告进行的一些计算.我需要有一个完整的审计跟踪(出于监管原因),并且能
我正在建立一个非常以数据为中心的系统.我有大型的分层数据集,但没有业务规则.系统的输出来自对数据和一些报告进行的一些计算.我需要有一个完整的审计跟踪(出于监管原因),并且能够从过去的任何一点对数据集运行计算.

出于这些原因,我认为有一个使用CQRS的事件源系统是要走的路.我见过的所有例子都围绕创建聚合来做ES.我遇到的问题是因为每个数据都是一个大的相关集合,我会有少量的大量聚合.替代方案似乎是将设置拆分为它的部分,并将每个部分称为聚合.但是,为了进行任何计算,我必须加载数十万个聚合.

我的问题是,是否有人拥有以数据为中心的CQRS ES系统的经验以及可能是什么样的?

有没有更好的方法来存储数据集的历史而不使用ES?

谢谢你的帮助.

But, in order to do any calculation I would have to load hundreds of thousands of aggregates.

语言检查:聚合仅存在于写模型(C)中.计算和报告来自读取模型(Q).毕竟,当您报告事件历史记录时,您不会更改/追加事件历史记录.

It’s an asset management system. Each Asset has 100k+ pieces of equipment.

这听起来有点像库存跟踪系统. Greg Young评论说“in most inventory systems there are no commands.”

因为“记录簿”是现实世界,而不是模型,“命令”没有意义 – 模型不允许拒绝现实.没有命令,聚合就会消失;没有业务规则可以强制执行.只是宣布改变现实世界的事件.

CQRS ES的基本模式仍然有效,也就是说您将事件历史记录写入持久层(即审计跟踪),并从该记录中发布事件,以便您的其他预测可以更新.

您需要考虑适合您情况的事件流数量.在域模型是记录簿的CQRS解决方案中,每个聚合通常写入独占事件历史(减少争用);需要来自多个流的数据的模型将它们连接在一起.因此,您可能希望为不同的外部事件源做类似的事情.或者,您可以将它们全部发布到单个事件流中,然后让读取模型过滤掉它们不需要的事件.

网友评论