从实体创建VO

时间:2018-10-16 10:44:14

标签: domain-driven-design microservices event-sourcing event-driven-design

我正在使用DDD和事件源CQRS建立电子商务。我的想法是将微服务中的每个AR分开。

在我的AR ShoppingCart中,我需要一个带有productId和Price的VO项目,因为添加到购物车后价格不变。

我还有另一个可以控制价格的AR产品。

我的问题是,由于使用事件体系结构,如何在没有同步请求的情况下从AR产品获取价格?

2 个答案:

答案 0 :(得分:0)

从根本上讲,您想要做的是将信息从一个聚合根复制到另一个聚合根。

您可以采用两种方法。

一种方法是从缓存的角度考虑-我们将一个域服务实例传递给购物车,该实例知道如何获取相关ID(产品代码?)并获得价格的缓存副本。因此,我们有一个后台过程,将定价信息从定价微服务复制到购物车微服务,然后自主购物车依赖于其本地缓存的价格副本。

重要说明:在缓存中包含及时性元数据没有任何问题,因此,锐化工具可以包含有关缓存信息是否“过旧”的信息。

另一个更直接-有一种方法,您可以通过该方法将带有价格的命令发送到购物车,并构建一些业务流程逻辑,以观察哪些购物车需要价格,然后使用以下命令发送命令到购物车合适的价格。

答案 1 :(得分:0)

如果您有两个微服务,则可以让每个微服务发布事件流。您的ShoppingCart微服务可以使用产品微服务中的PriceChanged事件,并维护每个产品的最新价格的本地缓存。将产品添加到ShoppingCart时,您将引用本地价格缓存。

将监听事件作为一种通信手段的相同方法,从聚合间扩展到跨边界上下文或微服务间乃至系统间。根据您对价格变化的敏感性,您可能必须采用上述其他方法,但是我认为如果您选择CQRS + ES模式,您对最终的一致性会有一定的容忍度。