今天我们来探讨一下商城项目当中购物车的场景,分析一下商城中购物车场景的业务实现以及要注意的问题。

第一、普遍认知

首先想聊一下部分开发同学对购物车业务的一个普遍的误区。部分没有开发过购物车业务的小伙伴会认为,购物车业务有什么好分析的,不就是简单的增删改查吗?一旦听到这样的回答,往往几乎可以断定,这位是没有实际开发过购物车业务,下面,我们来分析一下,购物车有哪些业务,我们需要注意些什么。(因为商品购物车关联的就是商城的订单创建,具体可以查看 商城项目的业务分析创建订单这篇文章。

第二、具体业务分析

1. 表结构梳理。购物车项目,往往只要一张主表就足够了,有时候也会多一张日志表,记录某一条购物车信息的变化。主表里的字段分几个部分,首先是用户信息,如用户id等,其次是商品信息,如商品goodsId,商品skuId,商品图片,sku图片,配送方式(自提或者邮寄)等等,还有时购物车表独有的信息,如添加购物车时的数量。那么在这里就涉及到一个问题,要不要在主表的商品信息里,附加上购物车的价格,多少积分或者多少现金。这里加上的话,对于用户来说,体验更好,但是对于程序来说,一旦商品的价格变化,所有购物车信息价格跟着变。因此,这里也见仁见智,购物车主表里有价格的,就要做好准备改,主表里没有价格的,就要做好准备每次都去查。个人而言,我更倾向于第一种方式,当商品价格变动的时候,修改对应购物车里的价格,所以我会在主表里加上商品的实时价格。

2. 具体的业务。购物车的业务有哪些呢?业务是购物车的增删改查,但不是简单的增删改查。因为这里的增删改查与订单,与商品,与库存都有关系。

3. 代码实现。首先我们思考一下添加购物车: (也有把添加购物车和修改购物车整合成一个接口的,这里我们用分开两个接口方式)
入库内容: 购物车表,添加一条数据, 字段有会员id, 商品skuid, 商品配送方式, 添加的数量, 添加时间, 商品信息(图片,商品名称, sku名称,skuNo,商品价格, 商品积分, 商品邮费等商品的快照)。组织字段值和关联值: 会员id,通过token可以解出来, 商品skuId查sku表, 数量前端传过来, 时间系统时间, 商品信息查出来。校验阶段,要校验的对象,  1.用户:  是否正常, 商品是否上架 。 2:购物车 商品是否已经在购物车(不在才新增)  3.商品是否上架。

我们再思考一下修改购物车的逻辑。要的结果是,用户选择修改什么,相应购物车表的什么信息就修改。比如skuId的修改,商品数量的修改,配送方式的修改等。所以同样的,我们在这里也要先校验参数,校验用户,校验商品,最后入库。

删除购物车,这里有的设计是用物理删除,也有的是逻辑删除。逻辑删除需要提前考虑的就是,数据的不断膨胀,因为数据的最大值,是用户数量和商品数量的乘积。

查询购物车信息。这里的查询购物车,一般只有列表接口就可以了,这里需要考虑,购物车是每次都查一次数据库还是缓存上呢。答案当然是加缓存。但是加上缓存之后,什么时候清除缓存,缓存多长时间,也是我们需要考虑的。商城缓存的使用,可以参考商城项目业务分析使用缓存 这篇文章。

以上就是关于购物车业务的分析。

商城项目分析购物车

第三、业务总结

购物车业务是商城里面相对比较容易一些的业务,但是,一个高性能的购物车模块的设计,对于架构和开发来说,也是非常值得思考的。通过商城购物车的分析,希望我们对商城项目有一个更深的认识。