首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DDD -多个集合(优惠券和采购)

DDD -多个集合(优惠券和采购)
EN

Stack Overflow用户
提问于 2021-01-19 07:12:32
回答 2查看 294关注 0票数 1

我正在构建一个DDD/ES系统,管理员可以生成优惠券代码供消费者共享和使用。

每张优惠券有一个最大折扣金额,这是“共享”所有用户的优惠券。一个例子是“优惠券123给予5%的折扣,每次使用最多可达10万美元。”一旦达到最高金额,优惠券就会自动过期。该优惠券也可能有规则围绕哪些项目有资格购买与该优惠券。

到目前为止,我有优惠券和购买作为单独的ARs。有问题吗?

  1. 如何在一个事务中不更新多个聚合的情况下更新优惠券剩余金额?因为这是关于钱的,所以感觉最终的一致性可能会导致收入的损失。域服务应该对此负责吗?

  1. 如何验证用优惠券购买的物品是否符合资格?在继续购买之前,请先询问命令处理程序中的优惠券AR:couponAR.AreValidItems(request.PurchaseDetails)

  1. ,我想追踪一下每次购买的优惠券中有多少是分配给你的?这是另一个AR (CouponUsageAR),还是只是优惠券AR CouponUsageAR上的一个事件?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-19 17:13:29

在实践中,很难(在数据库意义上)跨多个事件流进行事务处理。一种更常见的方法是在saga失败时使用saga模式和补偿事件,并在事件中使用相关标识符来匹配它们发生的不同实体。

例如,您可能有一个传奇,更新剩余的优惠券,如果成功,然后继续执行购买。如果购买失败,该传奇然后需要张贴一个补偿事件到优惠券事件流,以使它回到状态,它是在开始的传奇。

看一看Udi Dahan的在线视频,包括传奇模式,或者这方面的文档?

票数 2
EN

Stack Overflow用户

发布于 2021-01-19 17:22:43

关于强一致性和最终一致性的问题,问领域专家(毕竟这是领域驱动的设计)问题:

--更糟糕的是:优惠券代码提供的折扣超过其限制,还是无法接受订单?

如果答案是他们宁愿强制执行优惠券限制而失去销售,那么就需要有很强的一致性。如果他们宁愿接受命令,那么最终的一致性是需要的。值得注意的是,有一种简单的方法可以防止优惠券代码违反其限制:永远不要有订单。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65786914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档