事件源-提供给Command的数据和保存在Events中的数据

问题描述

我正在研究事件源,我有一些想法需要弄清楚。

例如网上商店-

客户将商品添加到购物篮并保存订单。

命令处理程序可以在客户集合根上创建订单,并添加一个OrderCreated事件,该事件包含客户ID,订单ID,商品ID,数量和单价。一切都很简单,但是如果汇总需要检查该商品是否有特价,该怎么办?

例如,如果这是一个篮子服务,它将订阅目录服务中的事件并存储它自己对目录服务的投影,然后可以使用它,因此篮子服务将包括一个事件存储以及某种形式的目录服务的投影?

或者如果在我刚刚描述的示例中,如果购物篮和商品目录功能是同一应用程序的一部分,并且它们仅保存事件数据,那么当客户创建订单时,处理程序将从事件中提取所有已订购商品通过存储库进行存储,将所有事件应用于它们,然后将它们返回给处理程序,以检查该商品是否有特价。

解决方法

汇总是否需要检查以查看该商品是否有特价?

它需要执行查询以获取所需的信息。

从汇总的角度来看,这些数据是外部的,因此它(或向其发送命令的处理程序)需要查询才能访问该信息。

查询的工作方式取决于您(每种方法各有利弊),查询处理程序可以:

  • 调用一个存储库,以加载汇总并检查特殊优惠(您也可以考虑将事件源仅存在于系统的一部分中,而使这一部分使用另一种方式存储dara)
  • 远程调用Catalog Service API以检查特价商品
  • 查询本地数据库,该数据库填充了读取目录服务发出的事件并“本地”存储到购物篮服务