【发布时间】:2021-01-19 07:12:32
【问题描述】:
我正在构建一个 DDD/ES 系统,管理员可以在其中生成优惠券代码,供消费者公开共享和使用。
每张优惠券都有一个由优惠券的所有用户“共享”的最大折扣金额。一个例子是“Coupon 123 每次使用最多 100,000 美元可享受 5% 的折扣。”一旦达到最大金额,优惠券将自动过期。优惠券还可能规定哪些商品可以使用该优惠券购买。
到目前为止,我将优惠券和购买作为单独的 AR。有问题吗?
-
如何在购买时更新优惠券剩余金额而不在单次交易中更新多个汇总?由于这是关于金钱的,感觉最终的一致性可能会导致收入损失。应该由域服务负责还是由 Saga 负责?
-
如何验证使用优惠券购买的商品是否符合条件?在继续购买之前,请在命令处理程序中询问优惠券 AR:
couponAR.AreValidItems(request.PurchaseDetails) -
我想跟踪每次购买分配了多少优惠券?这应该是另一个 AR (CouponUsageAR) 还是只是 Coupon AR (CouponUsed) 上的一个事件?
谢谢
【问题讨论】:
-
您认为
CouponAR 会有多忙?多个用户同时使用同一张优惠券有什么风险?这将决定在同一个 TX 中修改两者是否成本太高。从简单且一致的开始,然后根据需要走向最终的一致性。 -
谢谢@plaix。这完全取决于产品的成功程度。如果产品成功,肯定会出现并发使用的爆发。特别是因为优惠券计划的有效期很短,例如24 小时。
标签: domain-driven-design e-commerce event-sourcing