我正在构建一个DDD/ES系统,管理员可以生成优惠券代码供消费者共享和使用。
每张优惠券有一个最大折扣金额,这是“共享”所有用户的优惠券。一个例子是“优惠券123给予5%的折扣,每次使用最多可达10万美元。”一旦达到最高金额,优惠券就会自动过期。该优惠券也可能有规则围绕哪些项目有资格购买与该优惠券。
到目前为止,我有优惠券和购买作为单独的ARs。有问题吗?
couponAR.AreValidItems(request.PurchaseDetails)
谢谢
发布于 2021-01-19 17:13:29
在实践中,很难(在数据库意义上)跨多个事件流进行事务处理。一种更常见的方法是在saga失败时使用saga模式和补偿事件,并在事件中使用相关标识符来匹配它们发生的不同实体。
例如,您可能有一个传奇,更新剩余的优惠券,如果成功,然后继续执行购买。如果购买失败,该传奇然后需要张贴一个补偿事件到优惠券事件流,以使它回到状态,它是在开始的传奇。
看一看Udi Dahan的在线视频,包括传奇模式,或者这方面的文档?
发布于 2021-01-19 17:22:43
关于强一致性和最终一致性的问题,问领域专家(毕竟这是领域驱动的设计)问题:
--更糟糕的是:优惠券代码提供的折扣超过其限制,还是无法接受订单?
如果答案是他们宁愿强制执行优惠券限制而失去销售,那么就需要有很强的一致性。如果他们宁愿接受命令,那么最终的一致性是需要的。值得注意的是,有一种简单的方法可以防止优惠券代码违反其限制:永远不要有订单。
https://stackoverflow.com/questions/65786914
复制相似问题