周志明
(广西大学计算机与电子信息学院,南宁 530004)
基于策略模式和Spring框架的银行代缴费系统的研究
周志明
(广西大学计算机与电子信息学院,南宁 530004)
代缴费业务作为银行重要的中间代理业务,合作单位多,影响范围广,推广实效要求高,对相关信息系统的架构设计和开发实现提出很高的要求,如何能在短时间内完成系统的敏捷开发,实现相关功能,短平快地支撑业务的发展和推广,是银行目前最为迫切的需求。着重介绍策略模式和Spring框架的结合在银行代缴费应用上的实现,通过剖析策略模式原理和具体在代缴费业务场景中的实际运用,重点研究通过策略模式和Spring框架,如何升华面向接口的方法和技巧,从而构建高效、简单、高内聚、松耦合的银行代缴费业务应用系统。
策略模式;Spring框架
银行代缴费业务,指银行代理第三方合作单位开展的如水、电、煤、话费等领域的代理缴费业务。过去传统的实现方式,是针对每一个代缴费业务,实现一套系统,随着业务开展的增多,开发人员工作量、系统资源的占用量、运维人员的维护量也随之增加,同时业务无法在短时间内实现快速上线推广。这就要求银行需要优化系统的架构设计,通过设计模式的运用和相关技术的创新,使得各项代缴业务功能能够进行整合,让业务流程组件化,使各组件复用程度更高,系统资源占用更小,开发推广时间更短,运维更加简便。因此通过策略模式结合Spring框架的运用,可以实现系统架构优化,业务流程组件化,通过业务流程模版组装,针对处理逻辑相同的流程节点,可复用已有组件,针对特殊流程节点,通过策略模式进行路由,以实现业务逻辑处理中,组件的高复用性和高拓展性,从而达到构建高效、简单、高内聚、松耦合的银行代缴费业务应用系统的目的。
策略模式,即将一系列算法进行封装,通过向上层暴露的接口,进行特定算法实现的访问。算法的选择和指向是根据特定策略完成,从而能够实现基于不同的策略,可通过统一的访问方式,获取不同的算法的实现[1]。
策略模式设计如图1所示,具体为:定义一个Strategy的接口,用以规范算法实现的调用入口。具体的策略算法类需实现Strategy接口,如OperationAdd是Strategy的一个具体实现类,包含了接口约定方法doOperation的具体实现。主程序StrategyPatternDemo,拥有Strategy句柄,通过context调用具体的算法实现。
图1 策略模式设计图
Spring框架是为了降低软件开发的复杂性而创建的。其最核心的部分即提供了依赖注入(Dependency Injection)特征来实现容器对系统所依赖的组件实例进行统一的管理。通过控制反转和依赖注入实现主动向接口句柄输送具体的实现类。为了能更方便地获取具体的策略实现,使用了Spring框架对具体的策略实现实例进行统一地管理[5]。
以银行代理缴费业务系统,缴费记账功能为例进行系统架构设计。缴费记账流程如图2所示:
可见,在一个缴费记账的功能流程中,大多数的流程节点均可以被复用,只有前置处理以及与第三方合作单位进行交互时,需要执行特殊业务逻辑,因此可以在执行特殊业务逻辑时,加入策略模式的应用,而其他流程则可复用公共组件,以此降低开发运维成本、系统资源。未来新增业务时,便可拓展策略的实现,即可实现业务的快速推广上线。
为了能够在可拓展的业务流程节点中,加入策略模式,为此,需要完成如下几点:
(1)确定策略决定的关键要素,即具体特殊算法的寻找和定位的依据。在代缴费业务记账功能中,我们以代缴费业务的业务类型编号作为决定策略的关键要素。例如:电费代缴的业务类型编号为:DFDJ,水费代缴的业务类型编号为SFDJ等。
(2)定义具体策略实现的访问接口,以规范访问的入口。例如:为与合作第三方单位交互定义一个策略访问接口,代码如下:
/**
*与第三方合作单位交互策略访问入口
*@author zhouzhiming
*
*/
public interface CommunicateWithThdService{
/**
*向第三方单位发送信息
*@param reqMap
*@return
*/
publicMap
(3)策略的实现,在CommunicateWithThdServie接口的实现类中,实现与第三方通讯的业务逻辑,例如电费代缴和水费代缴分别对应了两个策略实现类,如下:/**
*电费代缴与第三方单位系统交互实现类
*@author zhouzhiming
*/
public class CommunicateWithThdServiceImplDFDJ implements CommunicateWithThdService{
@Override
public Map
System.out.println("与供电局系统进行交互");
return null;
}
}
/**
*水费代缴与第三方单位系统交互实现类
*@author zhouzhiming
*/
public class CommunicateWithThdServiceImplSFDJ implements CommunicateWithThdService{
@Override
public Map
System.out.println("与水务公司系统进行交互");
return null;
}
}
并在Spring框架下的bean定义中,配置这两个策略的实例,如下:
(4)定义实例工厂。为了更方便地在策略处理节点中,获取具体的策略实现实例,因此需定义实例工厂BeanFactory,并在Spring的bean配置文件中定义,如下:
/**
*实例工厂
*@author zhouzhiming
*@since 1.0.0
*/
public class BeanFactory implements ApplicationContextAware{
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext con⁃text){
applicationContext=context;
}
public static Object get(Class beanType){
return applicationContext.getBean(beanType);
}
public static Object get(String beanName){
return applicationContext.getBean(beanName);
}
}
(5)策略节点中,基于约定优于配置的原则,根据约定好的策略规则,根据约定的业务类型(busType)寻找实现类,进行相应的业务逻辑处理,即可实现不同的缴费业务,分别与对应的合作单位进行交互通讯,实现如下:
/**
*与第三方交互节点选取策略
*@param context
*@throws CoreException
*@throws CoreRuntimeException
*/
public void execute(Context context)throws CoreException,Core⁃RuntimeException{
String busType=context.getData("busType");
String procBeanName="communicateWithThdServiceIm⁃pl"+busType;
String inputJsonStr=context.getData("input");
Map
if(!StringUtils.isEmpty(inputJsonStr)){
reqMap = JsonUtils.objectFromJson(inputJsonStr,Map.class);
if(!CollectionUtils.isEmpty(reqMap)){
context.setDataMap(reqMap);
}
}
CommunicateWithThdService communicateWithThdSer⁃vice =(CommunicateWithThdService) BeanFactory.get(proc⁃BeanName);
Map
if(!CollectionUtils.isEmpty(rspMap)){
String outputJsonStr=new String(JsonUtils.json⁃FromObject(rspMap,"UTF8"));
context.setData("output",outputJsonStr);
}
}
通过策略模式和Spring框架的结合,基于约定优于配置的原则,构建高效、简单、高内聚、松耦合的银行代缴费业务应用系统,增强了系统组件的复用性和拓展性,统一了业务实现模式,降低了开发运维工作量,减小系统资源的占用,使产品得以实现敏捷开发,快速推广。
[1]秦小波.设计模式之禅[M].机械工业出版社,2014.
[2]Eckel B.Thinking in Java,4th Edition[M].2005,117(667):212.
[3]ErichGamma,加马,李英军.设计模式:可复用面向对象软件的基础[M].2000.
[4]Cornell,Gary.Java核心技术[M].人民邮电出版社,2008.
[5]约翰逊.Spring框架高级编程[M].机械工业出版社,2006.
Abstract:Payment service as an important intermediate business of bank,with a wide range of cooperative units,big effectiveness and high require⁃ment of promotion,requests high demands for the relevant architecture design and development of information system.How to complete the agile development of system in a short period of time,implement relevant functions and support the development and promotion of the business,is currently the most urgent needs of bank.Focuses on the combination of strategy pattern and Spring framework in the bank payment system,and the research by strategy pattern and Spring framework by analyzing the principle and application of strategy pattern in payment business scenarios.Finds how to promote the methods and skills of interface oriented,to build efficient,simple,high cohesion and loose coupling of the bank payment application system.
Keywords:Strategy Patterns;Spring Framework
Research on the Banking Payment System Based on Strategy Patterns and Spring Framework
ZHOU Zhi-ming
(School of Computer and Electronic Information,Guangxi University,Nanning 530004)
1007-1423(2017)25-0073-04
10.3969/j.issn.1007-1423.2017.25.018
周志明(1989-),男,湖南祁东人,本科,中级,研究方向为计算机技术
2017-06-15
2017-08-30