前言


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

需求概述


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

1、单品促销

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

2、订单促销

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

梳理领域概念


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

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

梳理业务场景


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

梳理业务规则


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

梳理业务流程


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

梳理领域模型


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

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

面试作业之浅析京东促销活动核心模型 - DDD的更多相关文章

  1. 从电商平台促销活动看电商app开发趋势

    据亿合科技小编了解到:尽管各大电商平台都进入了品质和品牌时代,但对于消费者来说,低价依然是一个有吸引力的因素.尼尔森<网络购物者趋势研究>报告显示,2016年价格敏感型购物者的比例从15% ...

  2. vivo全球商城时光机 - 大型促销活动保障利器

    一.背景 官网商城在双11.双12等大促期间运营同学会精心设计许多给到用户福利的促销活动,当促销活动花样越来越多后就会涉及到很多的运营配置工作(如指定活动有效期,指定活动启停状态,指定活动参与商品等等 ...

  3. CJOJ 2482 【POI2000】促销活动

    CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...

  4. 【CJOJ2482】【POI2000】促销活动

    题面 Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用,他个人的详细情况,然后将账单放入一个特殊的投票箱. 当每天促销活动结束时, ...

  5. 亚马逊促销活动Promotion②:Money Off(满减折扣)的设置教程

    满减.折扣是放之四海皆有效的促销手段,虽然亚马逊对卖家有诸多限制,但这个促销方式却是允许的,对亚马逊的卖家而言,这对提升商品销量.打造爆款都是极好的.今天小编来讲讲亚马逊的Money Off要怎么设置 ...

  6. CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)

    CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...

  7. 图像分割之(五)活动轮廓模型之Snake模型简介

    在"图像分割之(一)概述"中咱们简单了解了目前主流的图像分割方法.下面咱们主要学习下基于能量泛函的分割方法.这里学习下Snake模型简单的知识,Level Set(水平集)模型会在 ...

  8. 图像切割之(五)活动轮廓模型之Snake模型简单介绍

    图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...

  9. Spring Security调研记录【七】--核心模型与实现

    网上有非常多关于Spring Security文章中,都觉得Spring Security(相对于shiro)过于复杂,个人觉得复杂的是Spring Security的官方文档而不是Spring Se ...

随机推荐

  1. LeetCode 9. Palindrome Number(c语言版)

    题目: Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...

  2. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念

    类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...

  3. 微信小程序上的map组件bindregionchange地图视野变化函数成功回调会产生2次值的问题?

    bindregionchange确实是会触发两次,第一次是视野变化开始,第二次是视野变化结束. 你可以尝试把e.type给打印出来,值为begin表示开始,值为end表示结束. wxml: js:

  4. SQLAlchemy使用介绍

    SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers ...

  5. python+selenium自动测试之WebDriver的常用API(基础篇二)

    本篇介绍一下python+selenium复杂操作的处理,基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里 一.常见特殊情况处理如iframe/弹窗处理 有 ...

  6. 64位windows8.1下安装 ImageMagick 总结

    1.  安装 ImageMagick-6.7.7-Q16-x64 下载地址:http://ftp.sunet.se/pub/multimedia/graphics/ImageMagick/binari ...

  7. java 异步线程下的顺序控制

    转载请注明出处!!!! java.util.concurrent.CountDownLatch 的使用可以达到效果   CountDownLatch是JAVA提供在java.util.concurre ...

  8. Angular 自定义拖拽指令

    指令 组件是一种带模版的指令.指令是超级. 结构型指令(改变布局)和属性型指令(改变外观和行为). Renderer2和ElementRef Angular不提倡直接操作DOM 对于DOM的操作应该通 ...

  9. C# Common Log function

    public int Log(string info) { info = "-----------------------------" + DateTime.Now.ToStri ...

  10. SQLSERVER的递归

    实际项目如遇到按照如地区这样树状结构的条件递归查询数据的场景中,可以使用. CREATE FUNCTION [dbo].[GetAllChildrenTypeById] ( ) ) RETURNS T ...