掌桥专利:专业的专利平台
掌桥专利
首页

一种构建责任树模式通用代码框架的方法及装置

文献发布时间:2023-06-19 12:22:51


一种构建责任树模式通用代码框架的方法及装置

技术领域

一种构建责任树模式通用代码框架的方法,用于构建责任树模式通用代码框架,属于框架技术领域。

背景技术

供应链金融产品涉及行业众多,由于业务特点,面临流程多样性,独特性,复杂性,在系统研发和渠道对接上的标准化一直是老难题。大多数系统面对市场需求多变,产品开发设计上只能在原代码上做大量堆砌或者简单配置,无法做到多维度扩展,差异化的隔离,日积月累代码中充满if-else,臃肿不堪,如图1所示,给项目开发和维护带来巨大困难。

银行的线上贷款主要以互联网模式运营、以供应链金融为主体,百分之九十的业务线上开展。线上贷款涉及行业众多,以商贸、旅游、医药、制造业为主。不同行业,客户群体不一样,意味着该产品存在上述痛点。

并且在各渠道场景下,现有的线上贷款的服务接口还面临以下问题:

1.对线上化已有多渠道业务进行开展,服务接口升级时,不能兼容老版本正常运行的问题;

2.线上服务接口错综复杂,臃肿不堪,接口版本执行不稳定性和性能较差问题;

3.接口服务执行策略单一,无法支撑线上灵活多变问题;

4.面对新平台对接只能从评审及测试进行把关,造成整个项目实施周期拉长,成本增加,无法做到“敏捷开发”,即无法根据服务接口方法参数不同,进行任务编排和策略选择。

发明内容

本发明的目的在于提供一种构建责任树模式通用代码框架的方法,解决现有的线上贷款服务接口对线上化已有多渠道业务进行开展,服务接口升级时,不能兼容老版本正常运行的问题;以及无法根据服务接口方法参数不同,无法组合进行任务编排和策略选择等问题。

为了实现上述目的,本发明采用的技术方案为:

一种构建责任树模式通用代码框架的方法,包括:

责任链模式优化:

将服务接口拆分为多个独立任务,将每个独立任务串联起来,形成一条链式结构,其中,多个独立任务包括参数校验、OCR验证、身份核查、要素鉴权和风控准入,服务接口即指业务代码;

优化模式组合成责任树模式:

融合策略模式和优化后的责任链模式,形成能完成业务任务的逐级委托,或在任一级选择不同的下游节点进行业务任务处理的责任树;

抽象代码形成框架:

基于责任树模式和业务任务为众链贷产品的客户准入服务,将客户准入服务的服务接口抽象出一个通用框架。

进一步,所述责任树模式优化具体如下:

首先将业务代码拆分为多个独立任务,拆分后的独立任务包括OCR验证、身份核查、要素鉴权和风控准入;

将各项独立任务串联起来,形成一条链式结构,即得到将业务任务逐级向下游节点执行的责任链。

进一步,优化模式组合成责任树模式的具体步骤为:

基于策略模式,对优化后的责任链模式中责任链中的各独立任务进行横向扩展,将各独立任务横向扩展为多个实现版本,得到多版本的独立子任务,即得到能完成业务任务的逐级委托,或在任一级选择不同的下游节点进行业务任务处理的责任树,其中,策略模式是指基于不同的场景,各独立子任务会存在多个实现版本,各实现版本中包括路由的配置规则,独立子任务为抽象处理者或策略。

进一步,抽象代码形成框架的具体步骤为:

基于责任树,构建任务执行接口ZbankHandler和任务分发者抽象类ZbankRouter形成责任树代码类结构,其中,任务分发者抽象类ZbankRouter负责定义实现路由到下游的多个子节点,即节点通过继承任务分发者抽象类ZbankRouter完成对策略的分发,任务执行接口ZbankHandler负责实现每个节点的具体业务实现逻辑,即通过实现任务执行接口ZbankHandler来对策略的具体实现;

在责任树中,根节点为只继承任务分发者抽象类ZbankRouter的节点,根节点是指入口节点;

根节点下的所有叶子节点为都实现任务执行接口ZbankHandler的节点;

所有叶子节点只实现任务执行接口ZbankHandler而无需继承任务分发者抽象类ZbankRouter;

除了根节点和叶子节点外的其他节点,都是上一层的任务执行接口ZbankHandler,同时是下一层的任务分发者抽象类ZbankRouter;

其中,节点指任务执行接口ZbankHandler中实现某个独立子任务的抽象,叶子节点指最后一层任务,无须向下分发任务执行接口ZbankRouter。

进一步,构建任务分发者抽象类ZbankRouter的具体步骤为:

基于Spring技术栈创建一个为所有抽象处理者提供代码模板和公共服务的任务分发者抽象类ZbankRouter,用于规范约束抽象抽象处理者行为抽象处理者;

代码模板和公共服务包括策略映射器接口内部类ZbankStrMapper、策略分发器规则的抽象方法和执行策略方法,策略映射器接口内部类ZbankStrMapper即指映射器Mapper;

任务分发者抽象类ZbankRouter中创建策略映射器接口内部类ZbankStrMapper,用于根据入参获取到对应的抽象处理者;

任务分发者抽象类ZbankRouter中创建策略分发器规则的抽象方法,此抽象方法的所有子类自行实现策略的分发逻辑,并将分发结果反馈给策略映射器接口内部类ZbankStrMapper;

任务分发者抽象类ZbankRouter中创建执行策略方法,执行策略方法即指根据业务规则分发至下游的任务执行接口ZBankHandler。

进一步,利用Spring容器加载类的初始化技术,在任务分发者抽象类ZbankRouter中产生对象时注册相匹配的策略映射器接口内部类zbankStrMapper,其中,对象是指实现任务执行接口ZBankHandler的具体实例。

本发明还提供了一种构建责任树模式通用代码框架的装置,包括:

责任链模式优化模块:

将服务接口拆分为多个独立任务,将每个独立任务串联起来,形成一条链式结构,其中,多个独立任务包括参数校验、OCR验证、身份核查、要素鉴权和风控准入,服务接口即指业务代码;

优化模式组合成责任树模式模块:

融合策略模式和优化后的责任链模式,形成能完成业务任务的逐级委托,或在任一级选择不同的下游节点进行业务任务处理的责任树;

抽象代码形成框架模块:

基于责任树模式和业务任务为众链贷产品的客户准入服务,将客户准入服务的服务接口抽象出一个通用框架。

上述技术方案中,所述责任树模式优化模块具体如下:

首先将业务代码拆分为多个独立任务,拆分后的独立任务包括OCR验证、身份核查、要素鉴权和风控准入;

将各项独立任务串联起来,形成一条链式结构,即得到将业务任务逐级向下游节点执行的责任链。

上述技术方案中,优化模式组合成责任树模式模块的具体步骤为:

基于策略模式,对优化后的责任链模式中责任链中的各独立任务进行横向扩展,将各独立任务横向扩展为多个实现版本,得到多版本的独立子任务,即得到能完成业务任务的逐级委托,或在任一级选择不同的下游节点进行业务任务处理的责任树,其中,策略模式是指基于不同的场景,各独立子任务会存在多个实现版本,各实现版本中包括路由的配置规则,独立子任务为抽象处理者或策略。

上述技术方案中,抽象代码形成框架模块的具体步骤为:

基于责任树,构建任务执行接口ZbankHandler和任务分发者抽象类ZbankRouter形成责任树代码类结构 ,其中,任务分发者抽象类ZbankRouter负责定义实现路由到下游的多个子节点,即节点通过继承任务分发者抽象类ZbankRouter完成对策略的分发,任务执行接口ZbankHandler负责实现每个节点的具体业务实现逻辑,即通过实现任务执行接口ZbankHandler来对策略的具体实现;

在责任树中,根节点为只继承任务分发者抽象类ZbankRouter的节点,根节点是指入口节点;

根节点下的所有叶子节点为都实现任务执行接口ZbankHandler的节点;

所有叶子节点只实现任务执行接口ZbankHandler而无需继承任务分发者抽象类ZbankRouter;

除了根节点和叶子节点外的其他节点,都是上一层的任务执行接口ZbankHandler,同时是下一层的任务分发者抽象类ZbankRouter;

其中,节点指任务执行接口ZbankHandler中实现某个独立子任务的抽象,叶子节点指最后一层任务,无须向下分发任务执行接口ZbankRouter。

与现有技术相比,本发明的优点在于:

一、本发明对线上化已有多渠道业务进行开展,服务接口升级时,能完美兼容老版本正常运行。

二、本发明中的责任树模式框架代码具有横向和纵向扩展能力且复用性强,多种业务场景均可套用,实现快速种树。

三、本发明中责任链式编排及策略路由,可实现任务的灵活编排及策略路由。

四、本发明得到的通用框架结构更清晰,可维护性提升:没了各种IF语句的跳转,单个交易方法代码可控。

五、本发明问题易定位:由于策略间隔离即实现了代码层面的隔离,调试时可以直接定位到指定策略的业务逻辑代码,不需要逐句排查,即不用整体排查。

附图说明

为了更清楚地说明本发明实施案例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应该看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这 些附图获得其他相关的附图。

图1为责任链模式应用的示意图;

图2为策略模式应用的示意图;

图3为本发明中责任树模式示意图;

图4为本发明中责任树代码类结构示意图,其中,ZbankHandlerRouter1、ZbankHandlerRouter2、ZbankHandlerRouter11和ZbankHandlerRouter21中的1、2、11和21代表横向扩展的版本;

图5为本发明中客户准入服务代码类结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

一种构建责任树模式通用代码框架的方法,包括:

责任链模式优化:

将服务接口拆分为多个独立任务,将每个独立任务串联起来,形成一条链式结构,其中,多个独立任务包括参数校验、OCR验证、身份核查、要素鉴权和风控准入等,服务接口即指业务代码;

所述责任树模式优化具体如下:

首先将业务代码拆分为多个独立任务,拆分后的独立任务包括OCR验证、身份核查、要素鉴权和风控准入;

将各项独立任务串联起来,形成一条链式结构,即得到将业务任务逐级向下游节点执行的责任链。

优化模式组合成责任树模式:

融合策略模式和优化后的责任链模式,形成能完成业务任务的逐级委托,或在任一级选择不同的下游节点进行业务任务处理的责任树,如图1所示;

优化模式组合成责任树模式的具体步骤为:

基于策略模式,如图2所示,对优化后的责任链模式中责任链中的各独立任务进行横向扩展,将各独立任务横向扩展为多个实现版本,得到多版本的独立子任务,即得到能完成业务任务的逐级委托,或在任一级选择不同的下游节点进行业务任务处理的责任树,如图3所示,其中,策略模式是指基于不同的场景,各独立子任务会存在多个实现版本,各实现版本中包括路由的配置规则,独立子任务为抽象处理者或策略。

策略模式为现有的,具体是将算法的使用与定义解耦,即根据业务规则路由到不同策略进行处理; 选择算法时,框架代码可通过Map初始化静态配置也可通过数据库存储获取路由规则。

抽象代码形成框架:

基于责任树模式和业务任务为众链贷产品的客户准入服务,将客户准入服务的服务接口抽象出一个通用框架。

抽象代码形成框架的具体步骤为:

基于责任树,构建任务执行接口ZbankHandler和任务分发者抽象类ZbankRouter形成责任树代码类结构,如图4所示,其中,任务分发者抽象类ZbankRouter负责定义实现路由到下游的多个子节点,即节点通过继承任务分发者抽象类ZbankRouter完成对策略的分发,任务执行接口ZbankHandler负责实现每个节点的具体业务实现逻辑,即通过实现任务执行接口ZbankHandler来对策略的具体实现;

在责任树中,根节点为只继承任务分发者抽象类ZbankRouter的节点,根节点是指入口节点;

根节点下的所有叶子节点为都实现任务执行接口ZbankHandler的节点;

所有叶子节点只实现任务执行接口ZbankHandler而无需继承任务分发者抽象类ZbankRouter;

除了根节点和叶子节点外的其他节点,都是上一层的任务执行接口ZbankHandler,同时是下一层的任务分发者抽象类ZbankRouter;

其中,节点指任务执行接口ZbankHandler中实现某个独立子任务的抽象,叶子节点指最后一层任务,无须向下分发任务执行接口ZbankRouter。

构建任务分发者抽象类ZbankRouter的具体步骤为:

业务任务的节点通过继承任务分发者抽象类 ZbankRouter抽象类完成对策略的分发,通过实现任务执行接口ZbankHandler来对策略的具体实现;

基于Spring技术栈创建任务分发者抽象类ZbankRouter,为所有抽象抽象处理者提供代码模板和公共服务,同时也规范约束抽象处理者行为,代码模板和公共服务具体包括策略映射器接口内部类ZbankStrMapper(映射器Mapper)、策略分发器规则的抽象方法和执行策略方法,任务分发者抽象类ZbankRouter任务分发者抽象类ZbankRouter对应的程序具体为:

@Component

public abstract class ZbankRouter { }

基于任务分发者抽象类ZbankRouter任务分发者抽象类ZbankRouter创建策略映射器接口内部类ZbankStrMapper,用于根据入参获取到对应的抽象处理者,具体程序如下:

@Component

public abstract class ZbankRouter {

* 策略映射器接口内部类,根据指定入参获取表配置规则,路由到对应的抽象处理者。

* @param 策略的入参类型

* @param 策略的返回值类型

*/

public interface ZbankStrMapper {

/*

* @param param 入参

* @return 抽象处理者

*/

ZbankHandler get(T param);

}

private ZbankStrMapper zbankStrMapper;

}

任务分发者抽象类ZbankRouter中创建策略分发器规则的抽象方法,此抽象方法的所有子类自行实现策略的分发逻辑,方法返回策略映射器接口内部类ZbankStrMapper,目的是告诉具体抽象处理者选择与自己匹配的映射器Mapper(策略映射器接口内部类ZbankStrMapper),例如:服务要执行风控逻辑,就按风控策略自己的逻辑找到相匹配的映射器Mapper;具体如下:

/**

* 抽象方法需子类实现策略的分发逻辑

* @return 分发逻辑映射器 Mapper对象

*/

protected abstract ZbankStrMapper selectStrategyMapper();

任务分发者抽象类ZbankRouter中创建执行策略方法,执行策略方法即指根据业务规则分发至下游的任务执行接口ZBankHandler;具体如下:

/**

* 执行策略,框架会自动根据策略分发至下游的任务执行接口ZBankHandler进行处理

*

* @param param 入参

* @return 下游执行者给出的返回值

*/

public R executeStrategy(T param) {

finalZBankHandler zbHandler =ZbankStrMapper.get(param);

if (zbHandler!= null) {

return zbHandler.executeHandler (param);

}}

给任务分发者抽象类ZbankRouter中任务执行接口zbankStrMapper策略映射器接口内部类变量赋值,获取执行任务的处理对象。具体为:利用Spring容器加载类的相关初始化技术,在任务分发者抽象类ZbankRouter产生对象(是指实现任务执行接口ZBankHandler的具体实例)时注册相匹配的策略映射器接口内部类zbankStrMapper,具体如下:

/**

* 类初始化时注册分发策略 Mapper

*/

@PostConstruct

private void mapperInit() {

zbankStrMapper = selectStrategyMapper ();

}

最终“任务分发者抽象类ZbankRouter”代码为: @Component

public abstract class ZbankRouter {

* 策略映射器接口内部类,根据指定入参获取表配置规则,路由到对应的抽象处理者

* @param 策略的入参类型

* @param 策略的返回值类型

*/

public interface ZbankStrMapper {

/*

* @param param 入参

* @return 抽象处理者

*/

ZbankHandler get(T param);

}

private ZbankStrMapper zbankStrMapper;

/**

* 类初始化时注册分发策略 Mapper

*/

@PostConstruct

private void mapperInit() {

zbankStrMapper = selectStrategyMapper ();

}

/**

* 抽象方法需子类实现策略的分发逻辑

* @return 分发逻辑映射器 Mapper 对象

*/

protected abstract ZbankStrMapper selectStrategyMapper();

}

为了具体任务实现(即指业务任务),构建任务执行接口ZbankHandler具体如下:

节点通过继承任务分发者抽象类 ZbankRouter完成对策略的分发,通过实现任务执行接口ZbankHandler接口来对策略具体实现。

public interface ZbankHandler {

/**

* 策略逻辑执行

* @param param

* @return

*/

R executeHandler (T param);

}。

实施例

在实际案例应用中我们把客户准入服务(即指具体的业务任务)的服务接口中,把各服务接口分解。通过调用框架代码编写责任树。分解后具体包含:客户信息OCR校验、客户要素鉴权和客户风控策略执行。最终通过调用框架代码构建责任树。具体如下 :

第一层

CustAccAppService为客户准入服务入口,即责任树第一层节点,为入口节点。

第二层

OcrEntZbankHandlerRouter为企业ocr策略的抽象处理者,即企业ocr策略的具体处理者;

OcrPerZbankHandlerRouter为个人ocr策略的抽象处理者,即个人ocr策略的具体处理者;

OcrZbankStrMapper 为客户Ocr校验的映射器;

第三层

AuthFtwoZbankHandlerRouter为二要素鉴权策略的具体处理者;

AuthFThreeZbankHandlerRouter为三要素鉴权策略的具体处理者;

AuthFFourZbankHandlerRouter为四要素鉴权策略的具体处理者;

AuthInfZbankStrMapper为客户要素鉴权的映射器;

第四层

RiskAZbankHandler为渠道A风控策略; RiskBZbankHandler为渠道B风控策略;

RiskNZbankHandler为渠道N风控策略;

最终结构图参见图5。

详细步骤如下:

1.责任树第一层即ROOT根节点为客户准入服务入口CustAccAppService。客户准入服务入口CustAccAppService只继承任务分发者抽象类ZbankRouter,不实现任务执行接口ZbankHandler;

2.第一层客户准入服务入口CustAccAppService根据传入的参数调用executeStrategy(T param) 进行策略分发。即参数executeStrategy(T param) 匹配到下一层级(第二层)为OCR识别任务,获取客户Ocr校验的映射器OcrZbankStrMapper。其中,OCR识别实现的算法为两种个人OCR和企业OCR 。通过客户Ocr校验的映射器OcrZbankStrMapper的get(T param)方法获取第二层的任务执行接口ZbankHandler的具体实现类OcrEntZbankHandlerRouter,即第二层企业OCR算法的策略实现,调用后,通过任务执行接口ZbankHandler 中调用executeHandler(T param)的 完成企业OCR验证。

3.第二层OCR识别节点,既是 Root根节点的策略实现者也是第三层策略企业身份核查、个人身份核查的分发者,该节点只需要同时继承任务分发者抽象类ZbankRouter和实现任务执行接口ZbankHandler就可以了。

4.执行完OCR验证后,根据参数 “客户类型 + (2/3/4要素配置)”继续获取第三层节点。

5.第三层节点为要素鉴权。具体算法涉及二要素鉴权、三要素鉴权和四要素鉴权,分别会新增3个类。同第二层节点一样既是要素鉴权的策略实现者也是第四层风控执行策略的分发者,该任务节点只需要同时继承任务分发者抽象类ZbankRouter和实现任务执行接口ZbankHandler就可以了。

6.第四层任务节点为“风控策略”。通过风控策略处理类配置并没获取到下层节点故后续无其他流程,所以该节点为叶子节点。根据上面方案设计要点,无需继承任务分发者抽象类ZbankRouter,实现任务执行接口ZbankHandler即可。

7.根据参数param通过渠道策略映射器RiskZbankStrMapper的get方法获取具体的任务执行接口ZbankHandler为RiskAZbankHandler,调用executeHandler (T param)执行渠道A风控逻辑。

8.后续新渠道扩展,风控算法新增,其他不变的情况下。只需要新增一个RiskNZbankHandler。通过参数自动规则路由到 RiskNZbankHandler执行。

9.通过把客户准入服务的服务接口合理拆分和编排。调用众链贷“责任树”框架代码轻松实现了“客户准入服务-->OCR校验---->要素鉴权-->风控策略执行”四层结构。后续不管是横向扩展新的风控策略算法,还是纵向扩展第五层结构用于追加新场景任务,都比较方便快捷而且代码隔离性强。

相关技术
  • 一种构建责任树模式通用代码框架的方法及装置
  • 一种基于序列模式挖掘算法的系统发生树构建方法
技术分类

06120113270562