【发布时间】:2015-05-02 05:40:19
【问题描述】:
在 DDD 中,我理解事件可以在它们相互通信时解耦限界上下文。假设一个原子事务在分隔的有界上下文 A 和 B 上包含两个数据库操作。当 A 上的操作完成时,它会发送由 B 处理的事件,该事件完成第二个操作。但是,如果对 B 的操作失败,对 A 的操作如何回滚?
例如,我目前正在使用领域驱动设计设计一个系统。它包含一个成员资格和一个库存有界上下文。为了解耦上下文,我使用了事件:当一个订单被支付时,库存上下文会减少已售产品的数量,并发送一个 Product_Sold 事件。然后,该事件由 Membership 上下文处理,然后根据已售产品的价格减去用户的余额。
但是如果由于数据库故障导致用户余额更新失败,Inventory 上下文如何知道它以便回滚之前减少的产品数量?
【问题讨论】: