一个项目如何支持多种第三方对接如何实现?

简介: 一个项目如何支持多种第三方对接如何实现?

最近公司做了一个发票系统,只对接了一个第三方,但是现在要求对接多个第三方,如何提高代码的重用性减少开发量呢?

这里不得不引出设计模式了

这里想到的设计模式就是模板模式 和策略模式

每一种第三方平台都是一种策略

模板方法抽象类可以实现业务流程的整体逻辑

模板方法:可以将相同部分的代码放在父类中,而将不同的代码放入不同的子类中,用来解决代码重复的问题。比如RestTemplate, JmsTemplate, JpaTemplate

根据模板方法 首先梳理业务流程,确定不变的地方,不确定的方法都可以改为抽象方法。


此处省去了业务代码

大体框架如下

@Slf4j
public abstract class AbstractTableHandler<T> {
    //抽象处理发票业务
    //type 开票类型
    public JSONObject getInvoicePdfUrlpre(JSONObject param ) {
        //重新开票校验开票次数不能超过3次; 
        //判断本次开票是否是重开
        try {
            JSONObject process = process(param);
                JSONObject processAfter = processAfterc(process,param,ifchongkai);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    //b端处理结果
    public abstract JSONObject processAfterb(JSONObject process, JSONObject param, boolean ifchongkai);
    //开票B端
    public abstract JSONObject processb(JSONObject param);
    public abstract List<T> processmoney(String money,JSONObject param);
    //开票
    public abstract JSONObject process(JSONObject param)
            throws Exception;
    //处理开票结果数据
    public abstract JSONObject processAfterc(JSONObject s,JSONObject param,boolean reInvoce)
            throws Exception;
    }
}

实现一个策略Handler

@Slf4j
public class Handler extends AbstractTableHandler<FpkjxxSpmxs> {
    @Override
    public JSONObject processAfterb(JSONObject s, JSONObject param, boolean ifchongkai) {
        return s;
    }
    @Override
    public JSONObject processb(JSONObject jsonObject) {
        return JSONObject.parseObject(s);
    }
    @Override
    public List<FpkjxxSpmxs> processmoney(String money,JSONObject param) {  
        return fpkjxxSpmxsList;
    }
    @Override
    public JSONObject process(JSONObject jsonObject) throws Exception {        
        return JSONObject.parseObject(s);
    }
    @Override
    public JSONObject processAfterc(JSONObject s,JSONObject param,boolean reInvoce) throws Exception {
             return s;
    }
}

下面就是将这个策略注入spring

package com.reformer.invoice.handler;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@SuppressWarnings("rawtypes")
@Service
public class InvoiceStraegyFactory {
    @Autowired
    Map<String, AbstractTableHandler> strategys = new ConcurrentHashMap<>();
    public AbstractTableHandler getInvoiceStraegy(String invoicetype) {
        if (StringUtils.isBlank(invoicetype)) {
            return null;
        }
        AbstractTableHandler strategy = strategys.get(invoicetype);
        if (strategy == null) {
            strategy = strategys.get(invoicetype);
        }
        return strategy;
    }
}

最后就是策略调用

AbstractTableHandler<?> tableHanlder = invoiceStraegyFactory.getInvoiceStraegy(invoiceChannelCodeDao.getCode());
JSONObject invoicePdfUrlpre = tableHanlder.getInvoicePdfUrlpre(reqJson);


这样 每种不同的第三方对接是需要实现对应的Handler 就可以

其他业务逻辑代码不变

相关文章
|
关系型数据库 MySQL API
不同项目下如何进行快速的对接(其中一种方法)
不同项目下如何进行快速的对接(其中一种方法)
91 0
|
6月前
|
消息中间件 前端开发 安全
第三方数据平台技术选型分析
这篇文章分析了第三方数据平台的技术选型,涵盖了移动统计平台、自助分析平台和BI平台的不同代表厂商,讨论了它们的数据源、使用要求和适用场景。
162 2
|
6月前
|
开发者 存储 API
Xamarin 云服务集成竟然如此强大,简化后端开发不再是梦,数据存储、用户认证、推送通知全搞定!
【8月更文挑战第31天】Xamarin 是一款强大的跨平台移动应用开发工具,通过与云服务集成,显著简化了后端开发。开发者无需自行搭建服务器,即可利用云服务提供的数据存储、用户认证、推送通知等功能,大幅减少数据库设计、服务器配置及 API 开发的时间成本。借助 Azure Mobile Apps 等云服务,Xamarin 可轻松实现数据存取操作,同时增强应用安全性与用户参与度,使开发者更专注于业务逻辑和用户体验,提升开发效率并降低成本。这种方式在快速发展的移动应用领域极具价值。
83 0
|
8月前
|
安全 定位技术 API
探讨如何在Flutter中集成支付、地图等第三方服务,以及集成过程中需要注意的问题和最佳实践
【6月更文挑战第11天】本文介绍了在Flutter中集成第三方服务,如支付和地图,以增强应用功能和用户体验。开发者可通过官方或社区插件集成服务,注意服务选择、API调用、错误处理和用户体验。支付集成涉及选择服务、获取API密钥、引入插件、调用API及处理结果。地图集成则包括选择地图服务、获取API密钥、初始化地图组件和添加交互功能。集成时要选择稳定插件、仔细阅读文档,处理错误,优化性能并遵循安全规范。随着Flutter生态发展,更多优质服务将可供选择。
134 2
|
8月前
|
小程序 存储 UED
如何实现一次搭建 多平台适配的小程序
【6月更文挑战第3天】如何实现一次搭建 多平台适配的小程序
|
9月前
|
API 开发工具 数据安全/隐私保护
API接口的对接流程和注意事项
随着互联网技术的发展和应用的普及,API接口已经成为不同系统、不同应用之间进行交互和数据交换的重要方式。API接口使得不同的系统能够互相调用对方的功能,提高了系统的灵活性和扩展性。但是,在进行API接口对接的过程中,需要注意一些流程和事项,以确保对接的顺利进行和系统的稳定运行。
|
9月前
|
数据采集 JavaScript API
第三方系统访问微搭低代码的后端API
第三方系统访问微搭低代码的后端API
|
设计模式 数据安全/隐私保护
高效接入第三方登录且易扩展的方法
我们使用适配模式来实现一个实际的业务场景,解决实际问题。年纪稍微大一点的小伙伴一定经历过这样的过程。很早以前开发的老系统应该都有登录接口,但是随着业务的发展和社会的进步,单纯地依赖用户名密码登录显然不能满足用户需求。现在,大部分系统都已经支持多种登录方式,如QQ登录、微信登录、手机登录、微博登录等,同时保留用户名密码的登录方式。虽然登录形式丰富,但是登录后的处理逻辑可以不必改,都是将登录状态保存到Session,遵循开闭原则。首先创建统一的返回结果ResultMsg类。
169 0
|
开发框架 API 数据安全/隐私保护
合约跟单带单模式API对接平台开发部署指南(附源码实例分析)
合约跟单带单模式API对接平台开发部署指南(附源码实例分析)
|
数据采集 数据库连接 API
获取第三方数据四种方式
减少开发人员逻辑处理。api将功能的逻辑在接口内部封装好,不需要开发人员在自行的编写逻辑