知识卡片
引入事件流把跨上下文查询改为本地查询
内容
事件的发布/订阅是异步机制,只有引起状态变化的命令才触发事件,查询不触发事件且需同步等待结果;若跨限界上下文查询就无法基于事件协作,会带来耦合并抵消异步优势。改进方法是引入事件流:在当前上下文缓存并同步本该由上游提供的数据,把跨上下文查询改为本地查询。例如订单上下文下单需验库存,本应调库存上下文远程服务;可在订单库也建库存表,订阅库存上下文的InventoryChanged事件把库存变更同步过来,验缺货时只查本地库存表。这样彻底消除同步查询、把所有协作变为异步命令操作,每个上下文只需向总线发事件、订阅感兴趣的事件,真正做到自治(事件消息协议的耦合除外)。发散:事件流本质是「读侧数据本地物化」,用可控的数据冗余换取上下文自治与响应力。
参考来源
- 位置:《解构领域驱动设计》附录B B.3.2(源文件:_epub-src/OEBPS/035.xhtml)
- 结论依据:原文说明引入事件流把跨上下文查询改为本地查询、以订单同步库存表为例。
- 原始内容:改进方法是引入事件流,在当前限界上下文缓存和同步本该由上游限界上下文提供的数据,以将本该属于跨限界上下文的查询操作改为本地查询操作。