前端后端的对接(接口+抽象类+默认实现:我是这样搞定多租户对接的)

前端后端的对接(接口+抽象类+默认实现:我是这样搞定多租户对接的)
接口+抽象类+默认实现:我是这样搞定多租户对接的

进销存系统对接多省份监管平台,我是这样设计的

一、背景

我们项目是个单体项目,Vue+SpringBoot,做进销存业务。前后端分离,多个客户共用一套代码,每个客户一个前端配置文件、一个后端配置文件,项目部署到每家客户的服务器上。

最近遇到一个新需求:各个省份的监管平台要求客户把进销存数据上传上去

需要上传的数据包括:

  • 入库数据
  • 购退数据
  • 销售数据
  • 销售退货数据
  • 库存变更数据

二、需求分析

经过调研,发现几个特点:

前端后端的对接(接口+抽象类+默认实现:我是这样搞定多租户对接的)

1. 接口规范大同小异

对比了各个省份的监管平台接口文档,都是在国家版本的基础上稍作改动,95%的参数都一样。

2. 需要对接的接口

一共6个:

  • 签到接口
  • 上传入库数据接口
  • 上传购退数据接口
  • 上传销售数据接口
  • 上传销售退货数据接口
  • 上传库存变更数据接口

3. 客户需求不统一

  • 有的客户不需要上传
  • 有的客户只要求上传入库+购退
  • 有的客户要求上传销售+销售退货
  • 有的医院要求上传销售+销售退货+库存变更

4. 数据处理方式不同

  • 大部分客户不需要特别处理,从数据库取数据组装成JSON即可
  • 少数客户的数据需要特殊处理

5. 未来可能扩展

监管平台未来可能要求上传其他数据、对接新接口。

三、设计方案

基于以上分析,我设计了如下架构:

1. 接口类

定义5个接口方法:

  • 上传入库数据
  • 上传购退数据
  • 上传销售数据
  • 上传销售退货数据
  • 上传库存变更数据

2. 抽象类

实现接口类,所有方法默认实现为:“暂无开通此功能”

为什么要用抽象类?
为了应对将来增加接口。如果不用抽象类,接口类增加一个方法,所有实现类都要跟着改。用了抽象类,只需要抽象类增加默认实现,其他类不受影响。

3. 默认空实现类

继承抽象类。不需要上传的客户,都走这个类——什么也不做,直接返回成功。

4. 客户实现类

每家客户写一个实现类,继承抽象类。需要上传哪种数据,就重写哪个方法,写具体的实现逻辑。

5. 省份Client类

每个省份写一个接口对接Client类,供各家客户的实现类调用。这样省份相关的对接逻辑集中管理,复用性强。

6. 公共工具类

考虑到大部分客户都不需要特殊处理,抽出一个公共工具类。不需要特殊处理的客户,直接调用公共工具类的方法;只有需要特殊处理的客户,才重写具体方法。

四、设计图


设计图

#Java #架构设计 #设计模式 #多租户

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读