前言


京东作为中国最大的自营式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. java日期间相隔年月日计算

    /**     * 获取date1相距date2多少天, date2>date1     * @param date1     * @param date2     * @return     ...

  2. Spring MVC基本概念

    MVC工作原理: 模型-视图-控制器(MVC)是一个以设计界面应用程序为基础的设计模式.它主要通过分离模型.视图及控制器在应用程序中的角色将业务逻辑从界面中解耦.通常,模型负责封装应用程序数据在视图层 ...

  3. ansible中的map

    ansible中的filter:   map  ,其实是jinja2中的filter python中 map(func, iter) 返回func与每个元素计算后的迭代器,iter是个可迭代对象 an ...

  4. iOS 使用GRMustache对HTML页面进行渲染

    第三方控件[GRMustanche] OC Swift //测试版本 7.3.2 最终效果图: [使用方法&& 核心代码] 通过cocoapods 导入 #import <GRM ...

  5. 大数据学习之hdfs集群安装部署04

    1-> 集群的准备工作 1)关闭防火墙(进行远程连接) systemctl stop firewalld systemctl -disable firewalld 2)永久修改设置主机名 vi ...

  6. java PDF分页打印

    将获取的pdf文件按页拆分:参考https://q.cnblogs.com/q/99944/ pdf文件有多页,第一页需设置横向打印,其他页设置为纵向打印. PDDocument document = ...

  7. C语言第零次作业

    Q1.你对网络专业或者计算机专业了解是怎样? 说实话不了解网络专业,在甚至在填志愿之前我都不曾听说过.但经过一番的查阅资料.现在,首先我了解到我们主要学习计算机.通信以及网络方面的基础理论.设计原理, ...

  8. Sublime2 Package Control不可用修复

    因为教程里用的是sublime2 所以就跟着用了,也没换3,但是最近安装Nodejs做配置时,发现插件安装器不能用了,已点安装就弹窗报错: there are no packages availabl ...

  9. Win Server 2003 10条小技巧

    微软推出Windows Server 2003已经有一段时间了,但是,由于它是一个面向企业用户的服务器操作系统,所以,没有引起更多个人用户的注意.实际上,简单地改变一下系统的设置,您也可以将Windo ...

  10. pyenv global 设置失败 pyenv local 设置就成功了 不知道啥原因

    dev@PC-20190309QPVT:/mnt/c/data/htdocs/python/flaskr$ pyenv global 3.6.1dev@PC-20190309QPVT:/mnt/c/d ...