商城的重构

商城分享

Gstore 项目重构

为什么要重构?

商城.png
商城体系-商品.png
商城体系-订单.png

主要原因有2个:

  1. 当前商城的数据库中包含了太多无用的表或者结构,这些结构从一定程度上也影响了新需求的设计。也有很多结构是冗余的,无用的,设计不合理的,例如订单中保存了多个车辆相关的字段,msisdn,vin等等,这些实际上跟订单这个业务并不是完全关联的,可能只有部分场景相关。
  2. 现在4个商城的代码混杂在一个商城的项目中,这个项目中也混杂了多个领域的业务,商品库存、订单、分类、品牌、banner、优惠活动。最直接导致的一个问题就是,比如一个新需求是针对应用商城安装包(也被视为一个商品)的,那么一旦去做这个新需求,发生一些数据库或者代码的改动,其结果很可能会影响到其他的商城(虽然在代码中现在已经做了一些商城的分离处理,但是还是难免会有遗漏)。

怎么重构?

结合上两条问题的起因,我们将整个商城也分为2步重构。

  1. 拆分各个商城,抽离出各个具象的业务,以及保留商城元系统。
  2. 抽象化商城元系统,并拆分系统领域,即拆分子系统。

系统架构

子系统

  • tsp-store 商城库存系统
    商城元数据的系统
  • tsp-order 订单系统
    处理订单业务的系统
  • tsp-activity 商城活动系统
    处理商城活动相关业务的系统

具象系统

  • tsp-app-store 应用商城系统
  • tsp-theme-store 主题商城系统
  • tsp-point-store 积分商城系统
  • tsp-flow-store 流量商城系统

数据库设计

库存系统表结构:
库存系统表结构.png

应用商城表结构:

应用商城表结构.png

主题商城表结构:

主题商城表结构.png

订单系统表结构:

订单系统表结构.png

优点

  • 各个商城专注于自己的业务,新业务没有耦合。
  • 商城拆分成3个子系统,减少子系统之间的耦合。
  • 后续维护方便,新来的同事也能很快入手,系统的扩展性也更好。

缺点

  • tsp-store中的元数据混在一起,单纯的作为一个仓库。
  • 一定量上肯定是加大了开发成本。

遇到的问题

  1. 像tsp-store这种元系统,本身只是提供给其他服务用,不提供对外的接口,这种服务是否符合微服务的整体架构?
  2. 如何很好的抽象出元数据?这个是比较重要的步骤,因为一旦元系统的结构变动,会影响到上层的服务(或者这里可以在元数据提供的入口中做一些低内聚的操作)
  3. 未来比较麻烦的一点是,为了兼容老商城的部分,新的商城系统主要负责做新的需求,如何能最大程度上从旧的商城剥离出来,这也是个需要注意的地方。
0%