SPU & SKU & 规格参数 & 销售属性

SPU & SKU

  • SPU & SKU & 规格参数 & 销售属性
    • 基础概念
    • 属性分组
    • 品牌分类关联
    • 规格参数新增与vo
      • 规格参数新增
      • AttrController
    • SpringCloud远程调用逻辑

SPU & SKU & 规格参数 & 销售属性

基础概念

类似类与对象的关系

SPU:Standard Product Unit(标准化产品单元)(抽象)

​ 是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。

集合了同一系列商品的共同特性信息。

​ e.g. iphone xs max 规格与包装,型号,内存,芯片等

SKU:Stock Keeping Unit (库存量单位) (具体)

​ 即库存进出计算的基本单元,可以是以件、盒等为单位。SKU是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有为一的SKU号。

​ e.g. iphone xs max:不同颜色,外形等

【规格参数】与【销售属性】

与SPU和SKU分别对应

  • 属性是以三级分类组织起来的,e.g. 手机类 – > 基本属性 -->机身颜色,规格尺寸等
  • 规格参数中有些可以提供检索
  • 规格参数也是基本属性,他们具有自己的分组
  • 属性的分组也是以三级分类组织起来的
  • 属性名确定的,但是值是每一个商品不同来决定的

SPU & SKU & 规格参数 & 销售属性_第1张图片

SPU & SKU & 规格参数 & 销售属性_第2张图片

SPU & SKU & 规格参数 & 销售属性_第3张图片

  • 不同品牌的商品可能有共同的属性,只是SPU值不同,如华为小米手机,都有型号内存等属性。

属性分组

品牌分类关联

  • 为了减少数据库查询,一般会设计一些冗余字段,如分类-商品关系表pms_category_brand_relation中,不仅仅保存品牌id和分类id,而是把品牌名和分类名也保存,就不用频繁查询id-name表
  • 由于品牌名和分类名是冗余数据,咋它们本身的表中,可能被修改,因此需要级联跟新,当名字被修改时,同时更新其他关系表中的冗余字段
  • 统一加上事务

规格参数新增与vo

规格参数新增

Request URL: http://localhost:88/api/product/attr/base/list/0?t=1597133388820&page=1&limit=10&key=

SPU & SKU & 规格参数 & 销售属性_第4张图片

  • 可选值后续录入一些数据快捷选择
  • 属性分类:attrgroup/list以前写过,分页查询
Request URL: http://localhost:88/api/product/attrgroup/list/225?t=1597133634913&page=1&limit=10000000
  • 快速展示:商品介绍里提前预览信息

SPU & SKU & 规格参数 & 销售属性_第5张图片

AttrController

  • 逆向生成的save只有三级分类id,没有包含属性所属分组,没级联保存,属性分组关联没有保存。

  • 以下写法不规范,标很多注解,包括校验等,所有功能都标注在实体类上,非常不规范。

//  @TableField(exist = false)
// private Long attrGroupId;
  • 专门新建vo包,将所有属性复制过来,新增一个attrGroupId属性,且不需要数据库相关注解

PO持久对象:对应数据表中的一条记录

DO领域对象:从现实世界中抽象出来的有形或无形的业务实体

TO传输对象:不同应用程序之间传输的对象。微服务之间传输的封装对象

DTO数据传输对象

VO值对象:通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出来的业务对象,可以和表对应也可以不对应,跟库业务需求。用new关键字创造,由GC回收

或者View Object视图对象

​ 接收页面传递来的数据,封装对象;

​ 将业务处理完的对象,封装成页面需要的数据(部分数据)

**BO业务对象:**主要把业务逻辑封装成一个对象。如一份简历,包括教育经历、工作经验等,分别对应不同给PO,建立一个对应简历的BO对象处理简历,BO包含PO。这样处理业务逻辑时,就可以针对BO去处理。

POJO简单无规则Java对象:传统意义的Java对象,以上所有都是POJO。

DAO数据访问对象:用来访问数据库的对象

  • 只有基本属性base有分组,销售属性sale不需要,save、update同理。设置common-constant设置枚举类,标记基本属性 / 销售属性,发生改动只需要修改此处枚举值,不需要修改(大量出现)其他方法值。
  • 【套路】
    1. Controller: 处理请求,接收和校验数据
    1. Service 接收controller传来的数据,进行业务处理
    1. controller接收Service处理完的数据,封装页面指定的vo

SpringCloud远程调用逻辑

一个service A调用 Service B.method(to对象),

  1. @RequestBody 将此对象转为Json;

  2. cloud从注册中心中找到gulimall-coupon服务,给coupon/spubounds/save方法发送请求。

    将上一步转的json放到请求体位置,发送请求。

  3. 对方服务收到请求,请求体里有json数据:

    将(@RequestBody entity)的请求体的json转为entity对象

传的to对象和entity可以不是同一个类型,只要json的属性一一对应可以封装即可即可

只要json数据模型是兼容的,双方服务无需使用同一个to。

你可能感兴趣的:(项目)