一种典型电商商品价格接口设计

1,151 阅读4分钟
theme: fancy
highlight: github.css

在得到一个业务系统需求后,在开发服务接口之前,我们会有一步是对其做领域模型分析,提炼出该业务系统涉及的各种实的或需的领域对象,并识别它们之间的关系。对某些业务系统来说,完成这些领域对象的CRUD操作及它们之间关系的组合变化,就能支撑大部分的业务需求。

我们在概要设计的时候,如何做接口设计,如何能做到接口结构清晰, 根据RESTful的规范返回需要呈现的资源结构,并且把某些业务行为或者资源屏蔽细节不对外暴露。

电商商品价格

需求:针对不一样场景有不一样的定价策略选择

  • 会员需要支持会员级别折扣率(管理员可根据实际业务给会员角色绑定折扣率)

  • 对于客户和门店来说,需要支持等级价格,意思是一个每一个最小订货商品里面有固定的多个价格(暂定10个),然后客户需要需要指定某个等级的价格,而且某个租户下面可以设置开启那些等级价格,我们系统有10个商品等级,用户可以设置1-10这个范围

  • 需要设计针对某个账户的单独定价

  • 需要门店可以选择按基准供应价来订货,其实就是一个统一价格

  • 调价单(特殊需求)

数据库模型

最终呈现如下的数据库模型:

  • t_customer_level_price 客户等级价格 
  • t_price_level 价格等级 
  • t_member_discount 会员基本折扣率 
  • t_member_level_price 会员价格 
  • t_customer_single_price 客户单独定价 
  • t_supplier_price 基准供应价 
  • t_pricing_relation 等级价格和客户的关联关系,还有定价模式

根据数据库设计呈现出来的接口

问题总结

  1. 首先我们价格模型需要抽象一下。说到底价格体系就是一个定价记录,这个定价记录里面有两个很重要的信息,一个是被定价的商品,一个是作用于谁?至于商品我们就不需要再去抽象了,但是这里的商品要是具体到某个可订货商品(sku-id + multi-id);作用于谁这里的谁,我们可以统一用target来描述,那可能有人会问,需求上面的是固定某个策略只是用某个定价策略,例如折扣率这种只会在会员使用,其实这才是问题,我们大可不必限定折扣和会员绑定上关系

  2. 我们理清楚定价模式和具体定价模式的关系,在需求上面只要需要新增门店和客户的时候需要选择定价模式来确定门店或者客户使用的是基准供应价还是等级定价,但是领域模型上来说,定价模式更加应该控制目标的定价模式,所以定价模式不应该只是控制门店和客户,并且也能选择四种策略的其中一种,并不是其中一种

  3. 不能把定价策略和等级价格的映射两个不同模型放在一个数据库表上面去。这样导致职责不单一(这里有一个问题,就是我们的基准供应价是不是要放在商品基础价格上面) 综述:我们一共支持4中定价模式:分别是基准供应定价、等级价格匹配(商品有固定的若干个价格,客户对用某个价格)、目标(目标可能是客户、会员、或者门店)等级折扣率、目标单独定价,而我们有一个定价模式去决定该目标的定价策略

设计步骤

  1. 根据数据模型梳理关键资源

2.梳理资源关系图

3.定义名词

4.设计接口

组织(管理)维度:

定价目标维度:(type是一个枚举值:**organization、organization-grade、member、member-grade)**

单位商品维度: