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

前言


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

需求概述


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

1、单品促销

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

2、订单促销

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

梳理领域概念


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

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

梳理业务场景


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

梳理业务规则


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

梳理业务流程


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

梳理领域模型


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

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

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

上一篇:e832. 从JTabbedPane中移动卡片


下一篇:sparkStreaming获取kafka数据(java版本)