今天在ITEYE看到有人问:
写道
现在各大电商都有自己的促销优惠方式,满减,立减,折扣,现金券,返现,积分抵现,赠送积分,使用范围也可能是单种商品,大类商品,单笔订单等,优惠环节涉及购买时,订单时和支付时,可谓非常纷繁复杂。
现在我正在开发的电子商务平台有商品Goods和货品Product,有订单Order和订单项OrderItem,我希望能尽量减少与现有功能的耦合,而设计一个尽可能全面覆盖上述优惠促销的组件,并可在以后进行扩展,现在初步有一个设计雏形,但是实际过程中发现还是太复杂,并且不得不开始耦合了,所以决定停工重新整理思路。
希望有能人给点思路和建议
现在我正在开发的电子商务平台有商品Goods和货品Product,有订单Order和订单项OrderItem,我希望能尽量减少与现有功能的耦合,而设计一个尽可能全面覆盖上述优惠促销的组件,并可在以后进行扩展,现在初步有一个设计雏形,但是实际过程中发现还是太复杂,并且不得不开始耦合了,所以决定停工重新整理思路。
希望有能人给点思路和建议
随便写了一个方案,设计思想是,在购物车结算前匹配促销规则计算出最终优惠金额
+-----------------------+ User -> Goods -> Cart -> Delivery -> | Promotions components | -> Checkout +-----------------------+ | Promotion rule 1 | | Promotion rule 2 | | Promotion rule 3 | | Promotion rule 4 | | Promotion rule 5 | +-----------------------+
数据库设计
+--------------+ | goods | +--------------+ | id |o---+ | ... | | | ... | | +--------------+ | +----------------------+ | | goods_promotion_rule | +--------------+ | +----------------------+ | promotion | | | id | +--------------+ +--->| goods_id | | id |o------->| promotion_id | | name | | ... | | plugin | | ... | +--------------+ +----------------------+
goods_promotion_rule 负责将商品与促销规则关系建立起来
promotion 是促销脚本,我方案是使用 lua 编写促销脚本,plugin用于存储lua文件地址
这样做的好处是不用因为促销规则改变而重新修改程序,单独制作 lua脚本即可
以上仅仅提供一个思路,你还可以建立一个goods_promotion_group将促销商品分组,然后再与goods_promotion_rule建立关系。另外在购物车中会同时出现多种促销规则,也是要考虑的
物流配送插件设计
+-------------+ +-----------------------+ User -> Goods -> Cart -> | Delivery | -> | Promotions components | -> Checkout +-------------+ +-----------------------+ | rule A | | Promotion rule 1 | | rule B | | Promotion rule 2 | | rule C | | Promotion rule 3 | | rule D | | Promotion rule 4 | | rule E | | Promotion rule 5 | +-------------+ +-----------------------+
数据库设计
+--------------+ | shipping | +--------------+ | id |o---+ | name | | | ... | | +--------------+ | +----------------------+ | | shipping_rule | +--------------+ | +----------------------+ | zone | | | id | +--------------+ +--->| shipping_id | | id |o------->| zone_id | | name | | plugin | | | | ... | +--------------+ +----------------------+