本文主要分享下电商类目的设计,结合公司的业务,为了保密性一些设计方案会引用网上一些大佬的思路,站在前人的肩膀上,对我学习到的知识进行归纳总结,诸多错误,欢迎大家批评指正
电商系统大家应该都比较熟悉,在天猫和京东购物去浏览商品,我们可以看到不同的产品分类
从图中我们可以大致了解到,商品类目分为一级分类、二级分类、三级分类
当我们点击手机这一分类时,进入到
我们可以看到相应的品牌和规格,至此基于面向对象的思维,我们首先要考虑对象与对象之间的关系,从上面的描述中我们能抽象出以下几个对象:产品分类,品牌,规格,产品分类与品牌是1对多关系,产品分类与规格是多对多关系
后台管理界面:
从产品分类角度,我们可以确认它的几个关联设置,某一分类下关联了多少个品牌,某一分类关联规格,比如颜色、大小等
规格由分类统一管理
关系图:
总结:附上网上一副图
接下来进行数据库表设计:
为什么品牌会关联店铺呢,我们看下淘宝:选数码->电脑分类下的游戏主机选intel品牌就能看到有哪些卖家在售这款商品
分析清楚了对象之间的关系,在领域驱动中比较关键的一步,就是要考虑每个抽象出来的对象本身有什么行为,也就是对应对象有什么方法。也就是说对象的行为只能对象本身去操作,外部对象只能调用对象提供的方法,外部对象不能直接操作对象。
@Entity
@Data
public class Category extends AbstractEntity {
@Id
@GeneratedValue
private Long categoryId;
private String categoryName;
private Integer level;
private Long parentId;
private Long rootId;
private Integer leafed;
private Integer sort;
}
@Entity
@Data
public class Brand extends AbstractEntity {
@Id
@GeneratedValue
private Long brandId;
private String brandName;
private char firstEn;
private Long categoryId;
private Long shopId;
private ApplyStatus applyStatus;
private String rejectCause;
/** 品牌图片标识**/
private String brandImageUrl;
private Integer sort;
/** 授权结束时间**/
private Date useEndTime;
}
@Entity
@Data
public class CategorySpec extends AbstractEntity {
@Id
@GeneratedValue
private Long categorySpecId;
private Long categoryId;
private String categoryName;
private Long specId;
private String specName;
}
@Entity
@Data
public class Spec extends AbstractEntity {
@Id
@GeneratedValue
private Long specId;
private String specName;
private Long categoryId;
private Integer sort;
}