电商系统设计:优惠券
·
前言
最近在使用研发一套电商系统(技术栈为SpringBoot3、MySQL、Spring Security、Vue3、Uniapp),研发完成后会发布到GoldPanKit中售卖。研发过程中也参考了目前主流的一些电商系统的设计,发现有些设计思想过于老旧甚至呆板,导致一些核心部分不够灵活。所以我打算对这些不足的地方进行“重构”,在此记录一下重构的想法。想法中并不包含代码实现,只是产品设计和实现思路。
产品设计
优惠券是商城的一个重要营销手段,所以这个模块的自定义扩展性非常重要,因为我们永远不知道客户需要什么另类或新颖的优惠策略。所以,抽离出所有优惠券都具备的配置信息,如下:
- 基础信息部分
- 名称
- 优惠券类型(以决定优惠表单的元素)
- 发放数量
- 发放方式(自行领取或系统赠送)
- 如果发放方式为自行领取,还需要补充领取时间范围限制
- 使用规则部分
- 可使用时机(领取后立即可用还是领取后次日可用)
- 可使用的时间范围
- 可使用的商品范围(全部商品、指定商品还是指定类目)
- 是否可叠加
不同优惠券类型拥有不同的优惠策略,例如:
- 满减优惠券,则需
- 配置“满”值
- 配置“减”值
- 满折优惠券,则需
- 配置“满”值
- 配置“折扣”值
- 两品类叠加折扣优惠券(A类目+B类目一同购买时打折),则需
- 配置A类目
- 配置B类目
- 配置“折扣”值
- 多品类叠加减免优惠券(ABCD类目任意两者或多者一同购买时打折),则需
- 配置类目集
- 配置“折扣”值
对于优惠策略,需要使用动态表单来处理,即选择不同的类型后,动态切换优惠策略表单,仅需要填写所需的配置项即可。
实现思路
前端动态表单部分,每个表单都可以单独封装为一个组件,在Vue中,可以使用v-if或component组件进行动态切换。
后端(仅讨论Java)计算优惠金额时,可以创建一个优惠券的父类,提供打折、减免等基础方法,每个优惠券类型的实现类都继承该父类,并提供所需的商品基础信息参数和优惠参数等,通过这些参数最终计算出优惠金额或优惠后的金额。
数据库中,对于优惠券的动态表单部分,可以使用longtext或者json类型来存储,最终以json形式存放在数据库中。
总体来说,产品设计保证了优惠券本身易扩展,实现思路中的父类也让优惠券的实现更清晰。
更多推荐





所有评论(0)