应使用适配器封装第三方API,如AlipayClientAdapter,仅暴露稳定接口(如pay、queryStatus),内部处理SDK升级、签名、JSON解析等细节,输入输出统一用自定义DTO,支持策略模式实现多版本共存与灰度切换,并防御性包装返回值与异常。

用适配器封装第三方 API,只暴露稳定接口
不直接在业务代码里调用支付宝、微信或 Apache Commons 的原始方法。而是新建一个类,比如 AlipayClientAdapter,把所有对外交互逻辑收进来。它的 public 方法只定义你真正需要的能力,例如 pay(OrderDTO order) 或 queryStatus(String tradeNo)。这些方法签名一旦定下,就尽量保持不变——哪怕第三方 SDK 升级后方法名、参数全换,也只在适配器内部做转换,外部业务代码完全无感。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
内部实现与外部契约严格分离
适配器类的私有字段和方法全部围绕第三方库展开:初始化 SDK 实例、处理签名、解析返回 JSON、重试逻辑、异常映射等。这些细节对外不可见。public 方法的输入输出统一用你定义的 DTO,而不是第三方的 Order、TradeResult 等类型。这样即使 SDK 返回结构大改,只要适配器能把新格式转成旧 DTO,上层就不需要动一行代码。
支持多版本共存与灰度切换
当新版 SDK 有 breaking change 时,不必全量替换。可以在适配器中引入策略模式,比如:
- AlipayV2Strategy 处理新版签名算法和异步通知格式
- AlipayV1Strategy 兼容老商户通道
运行时通过配置或租户 ID 决定走哪条路径。上线前先对 5% 流量启用新策略,验证无误后再全量,风险被牢牢锁在适配器边界内。
防御性包装返回值与异常
第三方调用可能返回可变集合、null 值或底层技术异常(如 SocketTimeoutException)。适配器需做两件事:
- getter 方法返回 Collections.unmodifiableList() 或 List.copyOf(),防止外部修改内部缓存
- 捕获原始异常,统一转为业务异常(如 PaymentNetworkException),不把 OkHttp 或 Jackson 的堆栈暴露给调用方
这样既守住数据一致性,又让错误处理逻辑集中在一处,不会散落在十几个 service 类里。

















