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

前言
京东作为中国最大的自营式B2C电商平台,提供一站式综合性购物,服务亿万家庭,涵盖3C、家电、消费品、服饰、家居家装、生鲜和新通路(B2B),满足了消费者的多元化需求 。每天都会发布相关的促销活动,来勾起消费者的购物欲望;每逢佳节还会进行大量的让利惠民,来促进全民狂欢 。
需求概述
商家搞促销活动的本质是促销商品,抓取消费者贪小便宜的心里,来拉动销售额,同时提高商家产品品牌的知名度,其实套路就是先提高商品的价格 , 然后在降价,呵呵,所以促销手段五花八门,搞得消费者晕头转向,接下来我们就来浅析一下京东到底有哪些促销手段 。
1、单品促销
2、订单促销

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

文章插图
梳理领域概念
领域建模的基础是要先理解领域,让自己成为领域专家 。如果做到了这一点,那我们就打好了坚实的基础 。因为大家都对电商这个大领域很熟悉了,所以我划分出一个促销中心/子域来支撑订单核心域的促销活动 , 也就不用解释了 。那么就可以根据需求概述为促销子域来梳理出所有的领域概念,概念的关系 , 达成共识,统一交流,最后形成通用语言 。
根据面向对象组合/聚合复用原则,我们应该学会从对象的职责上来考虑问题,而不是从结构上来考虑问题 , 所以我将单品促销、订单促销等等统称为促销(当然名词的定义可以不断的进行蒸馏,暂时就这么称呼吧);将打折、满减、订单翻倍等等统称为促销手段 。由于每个促销手段都有自己的促销规则,所以使用设计模式中的策略模式来封装这个变化点 。
梳理业务场景
从京东帮助中心了解到 , 所有的促销活动都是在买家下单时,进行递减相应商品金额的 。
梳理业务规则
【面试作业之浅析京东促销活动核心模型 - DDD】
面试作业之浅析京东促销活动核心模型 - DDD

文章插图
在DDD中业务规则叫不变性,任何的不变性必须要在一定的边界内才有意义 , 综上所述,我们要在促销聚合根边界内,来梳理它的业务规则 。买家在下单时,会对订单进行相应促销活动的验证,因此促销聚合根需要提供一个验证促销手段的规则 。
梳理业务流程
买家下单时,订单子域发布一个【开始订单创建事件】,促销子域订阅该事件,首先根据促销手段进行规则验证,并计算出订单抵额和商品抵额,然后,分别发布【商品抵额事件】和【订单抵额事件】 , 最后,如果验证合格则发布一个【优惠成功事件】 , 如果促销不合格,在发布一个【优惠失败事件】 。
梳理领域模型
通过前面的浅析,从战略上大致了解了促销子域 , 就是对指定订单的商品应用买家指定的优惠 。在战术上,DDD提供了很多的工具:聚合、实体、值对象、工厂、仓储、领域服务、领域事件等等 。现在我们就用这些工具来驱动设计我们的促销子域 。UML图如下:
面试作业之浅析京东促销活动核心模型 - DDD

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