前言

最近在使用研发一套电商系统(技术栈为SpringBoot3、MySQL、Spring Security、Vue3、Uniapp),研发完成后会发布到GoldPanKit中售卖。研发过程中也参考了目前主流的一些电商系统的设计,发现有些设计思想过于老旧甚至呆板,导致一些核心部分不够灵活。所以我打算对这些不足的地方进行“重构”,在此记录一下重构的想法。想法中并不包含代码实现,只是产品设计和实现思路。

产品设计

优惠券是商城的一个重要营销手段,所以这个模块的自定义扩展性非常重要,因为我们永远不知道客户需要什么另类或新颖的优惠策略。所以,抽离出所有优惠券都具备的配置信息,如下:

  • 基础信息部分
    • 名称
    • 优惠券类型(以决定优惠表单的元素)
    • 发放数量
    • 发放方式(自行领取或系统赠送)
    • 如果发放方式为自行领取,还需要补充领取时间范围限制
  • 使用规则部分
    • 可使用时机(领取后立即可用还是领取后次日可用)
    • 可使用的时间范围
    • 可使用的商品范围(全部商品、指定商品还是指定类目)
    • 是否可叠加

不同优惠券类型拥有不同的优惠策略,例如:

  • 满减优惠券,则需
    • 配置“满”值
    • 配置“减”值
  • 满折优惠券,则需
    • 配置“满”值
    • 配置“折扣”值
  • 两品类叠加折扣优惠券(A类目+B类目一同购买时打折),则需
    • 配置A类目
    • 配置B类目
    • 配置“折扣”值
  • 多品类叠加减免优惠券(ABCD类目任意两者或多者一同购买时打折),则需
    • 配置类目集
    • 配置“折扣”值

对于优惠策略,需要使用动态表单来处理,即选择不同的类型后,动态切换优惠策略表单,仅需要填写所需的配置项即可。

实现思路

前端动态表单部分,每个表单都可以单独封装为一个组件,在Vue中,可以使用v-if或component组件进行动态切换。

后端(仅讨论Java)计算优惠金额时,可以创建一个优惠券的父类,提供打折、减免等基础方法,每个优惠券类型的实现类都继承该父类,并提供所需的商品基础信息参数和优惠参数等,通过这些参数最终计算出优惠金额或优惠后的金额。

数据库中,对于优惠券的动态表单部分,可以使用longtext或者json类型来存储,最终以json形式存放在数据库中。

总体来说,产品设计保证了优惠券本身易扩展,实现思路中的父类也让优惠券的实现更清晰。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐