欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面试作业之浅析京东促销活动核心模型 - DDD

程序员文章站 2022-03-01 20:57:09
前言 京东作为中国最大的自营式B2C电商平台,提供一站式综合性购物,服务亿万家庭,涵盖3C、家电、消费品、服饰、家居家装、生鲜和新通路(B2B),满足了消费者的多元化需求。每天都会发布相关的促销活动,来勾起消费者的购物欲望;每逢佳节还会进行大量的让利惠民,来促进全民狂欢。 需求概述 商家搞促销活动的 ......

前言


京东作为中国最大的自营式B2C电商平台,提供一站式综合性购物,服务亿万家庭,涵盖3C、家电、消费品、服饰、家居家装、生鲜和新通路(B2B),满足了消费者的多元化需求。每天都会发布相关的促销活动,来勾起消费者的购物欲望;每逢佳节还会进行大量的让利惠民,来促进全民狂欢。

需求概述


商家搞促销活动的本质是促销商品,抓取消费者贪小便宜的心里,来拉动销售额,同时提高商家产品品牌的知名度,其实套路就是先提高商品的价格,然后在降价,呵呵,所以促销手段五花八门,搞得消费者晕头转向,接下来我们就来浅析一下京东到底有哪些促销手段。

1、单品促销

  • 打折,例如,商品售价100,打0.5折,只需支付50元。
  • 定金翻倍,例如,预售价20元,定金1元,可抵2元,表示支付1元定金可当2元使用,即用户支付定金后,尾款只需支付18元。

2、订单促销

  • 首单免息,例如,新用户第一个订单使用白条分期付款免息。
  • 满减,例如,订单金额满300减100

梳理领域概念


领域建模的基础是要先理解领域,让自己成为领域专家。如果做到了这一点,那我们就打好了坚实的基础。因为大家都对电商这个大领域很熟悉了,所以我划分出一个促销中心/子域来支撑订单核心域的促销活动,也就不用解释了。那么就可以根据需求概述为促销子域来梳理出所有的领域概念,概念的关系,达成共识,统一交流,最后形成通用语言。

根据面向对象组合/聚合复用原则,我们应该学会从对象的职责上来考虑问题,而不是从结构上来考虑问题,所以我将单品促销、订单促销等等统称为促销(当然名词的定义可以不断的进行蒸馏,暂时就这么称呼吧);将打折、满减、订单翻倍等等统称为促销手段。由于每个促销手段都有自己的促销规则,所以使用设计模式中的策略模式来封装这个变化点。

梳理业务场景


从京东帮助中心了解到,所有的促销活动都是在买家下单时,进行递减相应商品金额的。

梳理业务规则


在DDD中业务规则叫不变性,任何的不变性必须要在一定的边界内才有意义,综上所述,我们要在促销聚合根边界内,来梳理它的业务规则。买家在下单时,会对订单进行相应促销活动的验证,因此促销聚合根需要提供一个验证促销手段的规则。

梳理业务流程


买家下单时,订单子域发布一个【开始订单创建事件】,促销子域订阅该事件,首先根据促销手段进行规则验证,并计算出订单抵额和商品抵额,然后,分别发布【商品抵额事件】和【订单抵额事件】,最后,如果验证合格则发布一个【优惠成功事件】,如果促销不合格,在发布一个【优惠失败事件】。

梳理领域模型


通过前面的浅析,从战略上大致了解了促销子域,就是对指定订单的商品应用买家指定的优惠。在战术上,DDD提供了很多的工具:聚合、实体、值对象、工厂、仓储、领域服务、领域事件等等。现在我们就用这些工具来驱动设计我们的促销子域。UML图如下:

 面试作业之浅析京东促销活动核心模型 - DDD

到目前为止,我们已经完成了领域驱动领域模型设计,接下来就是领域模型驱动代码实现,请听下回分解。