一、需求阶段
开发一个入门版的电商系统,主要围绕两个点展开:
- 这个系统主要的客户是谁?
用户、运营、商户 - 客户想要哪些功能?
- 用户:用户主要是买东西,需要【浏览商品】、【购买商品】两个功能
- 运营:运营主要是卖东西,需要【进货】、【发货】、【修改商品信息】、【管理订单】四个功能
- 商户:商户需要看到收入等,需要【查看报表】功能
二、业务流程
购物主流程如下: 首选用户在客户端中浏览商品;然后把目标商品放入购物车中;接着选中购物车的目标商品,开始下单;然后用户进入结算环节;成功之后商家会发货;过几天之后用户就会收到商品;如果用户满意,购物流程结束,如果不满意,就会进入售后的退换货环节。 【开始】->【浏览商品】->【加入购物车】->【下单】->【支付】->【发货】->【收货】->【结束】->【售后】
三、功能模块划分
详细分析一下整个购物流程:
- 用户开始浏览商品,所以需要有一个【商品模块】来展示商品的详情;
- 用户选好目标商品之后,需要添加到购物车,所以需要【购物车模块】;
- 接着用户下单,所以需要一个【订单模块】;
- 订单完成之后进入支付环节,此时需要一个【支付模块】;
- 需要一个【库存模块】来扣减对应商品的库存数,并且更新订单状态为“已发货”
- 用户收货之后更新订单状态为“已收货”
所以整个购物核心流程中,主要包括【商品模块】、【购物车模块】、【订单模块】、【支付模块】、【库存模块】。
另外,还有其他模块:
7. 【促销模块】可以指定促销套路,计算优惠价格;
8. 【用户模块】维护用户的个人信息;
9. 【账户模块】负责维护用户的账户金额;
10. 【搜索推荐模块】负责商户的搜索和展示;
11. 【报表】对经营数据进行统计分析,给商户展示
四、技术选型
主要考虑三个方面:
- 使用的编程语言和技术栈
- 第三方的框架和云服务
- 存储系统
五、注意点
- 【促销模块】涉及到各种优惠券、满减、返现等等促销规则,当这些规则叠加在一起之后非常复杂,所以,优雅的实现方式是:把促销模块的变化和复杂性封装在促销模块内部,对外提供一个相对简单的接口,可以考虑如下几个对外接口:
- 哪些促销可用: 输入是商户ID和用户ID,返回可用的促销信息;
- 算价服务:输入一堆商品和用户使用的一堆促销,促销服务首先要验证这些促销之间是否都可以使用,是否有冲突,如果都没有,那么返回一个最终的促销价;整个促销价不仅包括促销之后的总价,还包括每个商品的实际优惠价,整个实际优惠价可以用于后续退货、计算成本收益等等。例如用户同时购买了两箱同样的牛奶共80元,使用两件打八折的优惠,那么实际上每箱牛奶32元,所以当用户退一箱牛奶的时候,只需要退32元、而不是退原价的40元。
- 解决超卖问题的方法一般是在下单的时候锁定库存,如果用户下单之后一直没有支付,也没有取消订单,那么可以等到一个阈值(例如三十分钟),直接取消订单和释放库存,要保证下单锁库存,发货减库存;
- 库存还有一个方案:设计两个字段:总库存和冻结库存,那么(当前库存=总库存-冻结库存),当用户下单一件商品时,冻结库存+1,当支付成功之后,总库存和总结库存分别-1,当订单超时未支付时,冻结库存-1,总库存不变。
本系列课程主要整理极客时间李玥老师的《后端存储实战课》
time.geekbang.org/column/intr…