分布式电商营销系统的实践之路:抽象规则

摘要:
前言去年在一家电子商务公司工作,被指派开发和设计商场的营销系统。事实上,我将在下游和营销组件之间添加一层聚合服务,以缩小营销的边界,提供统一的功能,如定价和优惠显示,并避免向系统添加过多的耦合关系。您可以将十多个现有的营销组件分为三类。这次,我们将讨论两种预营销,即结算前的营销活动。新设计面向对象设计:所有依赖项都终止于抽象类和抽象接口。

前言

  去年供职于一家电商公司,被分配到做商城营销体系的开发设计。本文章记录了我这个小菜鸟在营销设计中遇到的坑坑洼洼,以及在重构中的思路。


线性思维,线性设计

首先我们列一列营销组件有哪些

  • 满减
  • 折扣
  • 秒杀
  • 组合购
  • 换购
  • 优惠券
  • 新人有礼
  • 邀请有礼
  • 签到
  • 红包裂变
  • ...

其次是要知道营销在正向流程,即用户的下单路径中营销系统是如何起作用的,当然这只是简单的示意图,实际业务中要复杂许多。

主流程图

  在这种情况下我选择了一种“理所应当的设计”,即一种组件对应一个微服务。当然LZ不是说这种设计很糟糕,在营销需求不多的情况下这种方式能最快出成果。
  其实在营销组件很多的情况下组件、服务一对一的设计仍有优点,因为符合开闭原则,需求变更再频繁,也只需对单个组件进行更改,不影响其他组件的正常工作。

编排

  实际上在下游与营销组件之间我会加一层聚合服务,用来收缩营销的边界,统一提供如计价、优惠显示等能力,避免给系统加入过多的耦合关系。

  这种线性的服务设计能在迭代初期解决大部分问题,但暴露出来的问题也是显而易见的:

  • 部署成本较高
  • 代码库大量duplicate code,且组件之间的表设计有60%-70%相近
  • 一些重要的主流程逻辑其复杂度会随着组件数量提升而提升,且严重依赖于单应用的响应时间,无法降级

重构:凡事都得按‘规则’来

  在接受线性设计所带来的弊端后,我着手开始重构工作。这是个困难的工程,淘宝花了十年,经历6次重构,才实现了不上线就可以加组件,不得不说还是NB。

  重构的方向::抽取共性,合并工程,组件不决定服务。

  从业务中来,还得回到业务中去,和PM零零散散地归纳了现有营销业务的一些特点,以及将来的需求趋向。可以将现有营销十几种组件归为三类。

营销组件

  像积分权益、团购、优惠券等后置的营销活动,属于边界清晰、较为独立的服务,暂时不纳入重构的范围。这次讨论的是改价类和组合类这两种前置营销,即在结算前发生的营销活动。

  • 改价类针对单品进行改价,在购物车中直接显示活动价格。

  • 组合类针对多个商品进行改价,前置条件是1-n个商品通过数量/价格/sku类型 等触发的优惠,优惠形式也有多种: 直减/赠品/N元换购。

  虽然分为两类,但这些组件最终的效果都是改变订单中的物品价格,改价类比较直观,而赠品和N元换购同样可以视为将某个商品自动加入到订单中,并对其改价的行为。

  除了这点,组件们也有很多相同的属性,如生效时间段、限购、面对的用户群体、生效的sku范围等等。

新设计


面向对象的设计:所有依赖关系都终止于抽象类与抽象接口。


  OOP的精神无处不可借鉴。在了解到这些共性之后,我们就可以抽象出自己的通用规则模型了,说到模型~~其实像营销体系这类复杂度较高的系统,实践DDD是个不错的选择~

  在新的设计中,引入规则的概念。如果营销是类,那么规则就是这个类的一个实例。一条规则会拥有若干字段,按组分类之:

前置条件
  • 用户资格
  • 目标范围
  • 门槛量
  • 限购额度
  • 生效时间
  • ...
优惠参数
  • 优惠方式
  • 优惠内容
  • ...
规格
  • 优先级
  • 类型
  • ...

前置条件决定了如何触发这条规则;
优惠参数决定了触发后如何针对订单改价;
规格决定了这条规则的其他属性:
优先级用来控制规则之间的计算顺序;类型决定了这条规则的业务类型,也就是它代表的是什么组件,用于分组、互斥和触发组件的特有行为。


  建表字段自然也就按以上来参考,基本是一一对应,当然最好是预留一些字段。不要高估自己的抽象能力,何况你永远不知道下一个需求有多“惊喜”。必要时也可以建立规则详情表,容纳更多的可能性,总是好的~

  建立好规则表,其他相关的业务表也手到擒来了,如商品关联表,优惠记录表等等,这一块的共性很多,设计起来比较自由,就不赘述了,做好和规则记录的关联即可。

  在此基础上,就可以开始重构业务模块了,对于一些CURD接口无非就是把库都集中挪到同一个地方了,比较简单。难点在于计价模块,如何通过规则类型来区别化表达这张规则表,从而各种营销玩法都能准确完成价格计算,这里我采用了注解驱动的策略模式。实现等到下次在讲~


排版不是很好,慢慢进步,peace~


免责声明:文章转载自《分布式电商营销系统的实践之路:抽象规则》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇error:class 'socket.error' [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224yum提示Another app is currently holding the yum lock; waiting for it to exit...下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

京东试用报告APP端显示设置方法

京东的试用报告,之前一直都只能在PC端评价显示,现在手机端可以在买家秀的地方显示,需要设置一下。 第一步:试用后台报告审核通过; 第二步:登录京东商家后台,点击营销中心;     第三步:营销中心点击店铺运营,买家秀,选择试用报告;     第四步:填入试用商品SKU,查询,选择对应试用点击精选;      第五步:买家秀管理中置顶试用、前台展示如下。  ...

官方:金蝶实际成本在制品材料分配详解

解释:以下文档来自金蝶K3 WISE 15.0产品说明文档 1.参与分配标准列分配 【应用场景】:适用于对于材料费用分配没有特殊要求的企业,在产品和完工产品分摊没有特别需要注意的企业。【备 注】:在产品材料成本不单独计算,在产品和完工产品的成本按在产品分配标准列所选定的标准进行计算。【特别说明】:该分配标准与在产品分配标准相关,已(以)在产品分配标准为准。...

谈谈我对百度广告管家的一些看法

写作背景        我现在所在的公司-北京秒针信息咨询有限公司(秒针系统)是中国领先的第三方广告技术公司。公司目前的主营业务是广告相关产品,广告监测、广告交易、广告投放等。因此,作为广告行业从业人员,了解这个行业的业务和产品是非常有必要的。       百度作为中国最大的搜索引擎,广告相关的产品还是挺多的,不但如此还可免费使用。       下文是我对百...

[转]Business Model Canvas(商业模式画布):创业公司做头脑风暴和可行性测试的一大利器

本文转自:http://www.36kr.com/p/214438.html 本文来自First Round Review,他们准备的文章既讲故事,还同时向创业者提供可操作的建议,以助力打造优秀的公司。 精益创业一词已经广为人知。然而,其背后的哲学则来自于作家兼创业者 Alexander Osterwalder 和瑞士学者 Yves Pigneur 的 B...

基于矩阵式产品管理的奖金如何发放?

目前,对于各个公司产品研发的组织形式主要有三种:职能结构、轻度矩阵、重度矩阵。随着公司各个岗位之间的关联性越来越紧密,多个角色在一起合作的机会越来越多,岗位之间的协作性也就越来越频繁。像国内的华为、迈瑞、海康威视、步步高、方太等高科技企业,很早就实行了基于矩阵式的产品管理模式,如下图的第三种:       矩阵式管理奖金发放面临的问题  众所周知,第一种职...

Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍

本文承接上一篇:Java高级项目实战之CRM系统01:CRM系统概念和分类、企业项目开发流程 先来CRM系统结构图:   每个模块作用介绍如下: 1、营销管理 营销机会管理:针对企业中客户的质询需求所建立的信息录入功能,方便销售人员进行后续的客户需求跟踪与联系,提高企业客户购买产品的几率。 营销开发计划:开发计划是根据营销机会而来,对于企业质询的客户,对...