背景介绍
风控系统每种场景 如个人消费贷 都需要跑很多规则
- 规则1 申请人姓名身份证号实名验证
- 规则2 申请人手机号码实名认证
- 规则3 银行卡预留手机号码实名认证
- 规则4 申请人银行卡预留手机号码在网状态检验
- 规则5 申请人银行借记卡有效性核验
- 规则6 户籍地址与身份证号归属地比对
- …
而这些规则的验证都需要调用外部收费接口 鉴于外部接口调用逻辑很多可以复用 于是使用模板方法模式
进行封装。
调用外部接口模板方法
- 组装入参 (不同的接口有不同的入参 因为接口有数十个 省去创建数十个对象 入参统一使用Map)
- 发送请求 (可以统一)
- 返回内容解析 (不同的接口有不同的返回 返回对象统一继承
FeeData
) - 返回对象
AbstractFeeDataManagerTemplate
类
- getFeeData(params)
// 得到接口返回数据
- abstract buildParams(Map params)
// 组装该接口特有恒定的入参
- private sendRequest(param)
// 发送请求
- abstract FeeData resolveResponse(String response)
// 解析不同返回内容 统一返回FeeData
设计类图
伪代码
public abstract class AbstractFeeDataManagerTemplate {
protected abstract void buildParams(Map params);
public FeeData getFeeData(Map params){
buildParams(params);
String response = sendRequest(params);
return resolveResponse(response);
}
protected abstract FeeData resolveResponse(String response);
private String sendRequest(Map params) {
//使用HttpClient调用外部接口
return "";
}
}
public class NameIdCardVerificationManager extends AbstractFeeDataManagerTemplate {
protected void buildParams(Map params) {
// 组装此接口特有且恒定入参 如
params.put("code", "NAME_IDCARD_VERIFICATION");
}
protected FeeData resolveResponse(String response) {
// 解析接口返回 并组装成FeeData返回
return null;
}
}