记一次基于模板方法的设计开发过程

1、背景

        本人做抵押贷金融系统开发,最近在开发过程中,遇到一个新的需求,公司和原第三方支付公司有一定的矛盾,造成支付能力支持不足,公司内部进行的新支付系统的搭建,所以需要将原支付功能对接到新支付功能上去,并且是实现热切换,避免上线后,新支付系统或本系统出现问题,热切换到旧支付系统上面去,保证业务的实时性。

        首先,统计了所以需要支付能力的接口,包括,用户发送四要素确认短信验证码,绑卡确认,用户换卡,系统批量代扣,催债代扣,微信支付宝主动还款,催债主动还款等功能,改造的影响范围大,前面4个接口影响用户进件以及使用,后面4个接口影响用户的还款,资产的回收都可能造成公司资产损失,并且开发周期短,旧支付随时可能停止支持,所以在这种情况下,第一步就想到对情况进行总结,然后进行设计模式设计,提高开发效率。

2、分析

        首先,可以在线上热切换,不外乎读热配置中心,通过config 推送配置,读redis 不失效key 每次启动加载到redis,每次读数据库,因为公司没有使用热配置中心,线上去修改redis key 比较麻烦,然后采用了读数据库的字典配置,然后通过查表获取数据选择支付能力系统。其次,根据分析出的接口,可以得出,新旧支付能力都需要实现背景出现的功能接口点,根据模板方法的定义:模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。在选择不同的新旧系统能力时,即意味着不同的来使用不同的子类实现相同的功能,并且不在意新旧系统是如果具体实现的。

3、类图

 

 PayChannel 接口定义支付能力的接口能力,然后有两个新的支付能力实现类,实现具体的功能,通过PayChannelContext 获取具体实现的子类,通过context 去调用,通过构造方法,每次去获取数据库里面的字典值,然后切换具体的实现类。有一个点,context 不能交给spring 管理,应该spring是单例的,并且每次生成后,context具体实现固定,payChannel 属性指定的子类地址不能被修改,所以context 不被spring 管理 ,在非spring 管理类中,实例化spring 管理类,需要重写ApplicationAwareContext的setApplicationContext 方法,并且通过getBean方法获取类实例

public class PayChannelContext {private static final Logger logger = LoggerFactory.getLogger(PayChannelContext.class);private static final String PAY_CAHNNEL_KEY_NAME = "PAY_CHANNEL_KEY";private static final String PAY_CHANNEL_NEW = "PAY_CHANNEL_NEW";private static final String PAY_CHANNEL_OLD = "PAY_CHANNEL_OLD";private PayChannel payChannel;public PayChannelContext() throws Exception {A a= new A();a.setKeyName(PAY_CAHNNEL_KEY_NAME);AFegin aFegin = BeanContextAware.getBean(AFegin.class);List<A> aList = aFegin.findlist(parmDic);if (aList .isEmpty()) {throw new Exception();}a = aList.get(0);String payChannel = a.getOptCode();if (PAY_CHANNEL_NEW.equals(payChannel)) {this.payChannel = BeanContextAware.getBean(NewPayChannel.class);} else if (PAY_CHANNEL_OLD.equals(payChannel)) {this.payChannel = BeanContextAware.getBean(OldPayChannel.class);} else {throw new Exception("");}}
}
@Component
public class BeanContextAware implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {context = applicationContext;}public static <T> T getBean(Class<T> beanClass) {return context.getBean(beanClass);}
}

 4、优势

        本次开发过程可以形成一个公用的经验,金融系统调用第三方系统的业务点多,影响范围大,第三方系统类型多。通过此次开发,可以对第三方系统接口进行改造,提高系统的兼容性。并且这种模式扩展能力强,如果需要对接第三个、第四个三方系统,只需要实现相同的接口,然后通过修改context的构造方法即可,避免了对原业务代码的入侵,减少开发过程可能需要的错误

5、总结

        开发过程中,要多思考代码的扩展性,维护性,重复利用性,等程序本身的健壮上来。我比较讨厌那种一来公司,就是个大头兵,就说公司代码该上什么docker ,k8s,用什么redis 分布式锁的人,我认为新技术,新工具是提高系统整体性的东西,代码的质量还要要从底层做起,自己做代码开发,首先着眼于代码本身的东西,如果以后未来本身的能力有所提高,再考虑其他的东西对系统的提升

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24670.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022 读书总结

2022 年主要阅读了文学类和理财类书籍&#xff0c;增加了几本杂项书籍&#xff0c;具体如下&#xff1a; 文史类 4 本 《软技能 2-软件开发者职业生涯指南》- 约翰.森梅兹《三体&#xff1a;黑暗森林》-刘慈欣《三体&#xff1a;死神永生》-刘慈欣《浪潮之巅》- 吴军理财类 7 本…

派森小镇(五)帮助

雾霭沉沉&#xff0c;水波澄碧。在一处悠远僻静的地方上有一个神奇的小镇&#xff0c;小镇的名字叫派森镇。小镇的前面有一条河&#xff0c;碧蓝的水映出小镇周围水墨画般朦胧的世界。 小镇上的人一出生就拥有特殊的技能&#xff0c;他们中的每一个人都是python的成员&#xff…

零基础 Amazon Web Services (AWS) 入门教程图文版(一)

现在小站唯一的流量都靠AWS这个关键词了,刚好要用AWS重新建站,所以从头开始记录一遍吧。 所谓零基础,就是你可以没有任何AWS使用经历,仍然能够按照教程操作下去。所谓图文版,就是建议手机用户在没有连Wifi的情况下尽量不要查看全文。图片一般都有大图,看不清的可以点击查…

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day22,linux内核视频教程

优秀问答摘自&#xff1a;https://ask.csdn.net/questions/1101634 两者的共同点&#xff1a; 都是用来协调多线程对共享对象、变量的访问 都是可重入锁&#xff0c;同一线程可以多次获得同一个锁 都保证了可见性和互斥性 两者的不同点&#xff1a; ReentrantLock 显示的获…

百万奖金悬赏大模型不擅长的任务!这 11 个任务模型越大,效果越差!

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 去年咱们在介绍百万悬赏时提到&#xff0c;“海量资源砸出的大模型真的会一直那么香吗&#xff1f;”&#xff0c;目前来看&#xff0c;自打 ChatGPT 横空出世引领一众大模型开辟新的生活和工作方式以来&#xff0c;还是挺香的…

三本-安全岗-面经总结(多多面经)

三月之前都不知道暑期实习是什么东西&#xff0c;导致错过很多机会&#xff0c;3月末才迷迷糊糊的准备面试&#xff0c;信息差跟环境真的很重要&#xff0c;周边没一个投暑期实习的同学&#xff0c;学校也没有任何提醒&#xff0c;自己一个人摸爬滚投实习、准备、面试&#xff…

数据万象 | AIGC 存储内容安全解决方案

AIGC&#xff08;人工智能生产内容&#xff09; 已经成为与PGC&#xff08;专业生产内容&#xff09;、UGC&#xff08;用户生产内容&#xff09;并驾齐驱的内容生产方式。由于 AI 的特性&#xff0c;AIGC在创意、个性化、生产效率等方面具有独特的优势&#xff0c;这些优势可以…

没关系,前端还死不了

前言 网络上的任何事情都可以在《乌合之众》书中找到答案。大众言论没有理性&#xff0c;全是极端&#xff0c;要么封神&#xff0c;要么踩死。不少人喷前端&#xff0c;说前端已死&#xff1f;前端内卷&#xff1f;前端一个月800包吃住&#xff1f; 对此我想说&#xff0c;“…

Android程序员秋招就业你准备好了嘛?

前言 秋招即将到了&#xff0c;又到了一年一度的大型“程序猿就业典礼”。 从事IT行业那么多年&#xff0c;我自己也经历过&#xff0c;也见过很多求职路上的人生百态。 当初我也是从一个不知名的“打工人”&#xff0c;到如今成为了鹅厂的一员… 这其中经历了太多太多&…

又一AIGC独角兽!帮企业定制大模型,营销物料生成发布全包,Adobe前CTO创办

衡宇 发自 凹非寺量子位 | 公众号 QbitAI 全球范围内的投资者纷纷重金押注AI初创公司这事儿&#xff0c;已经越来越掩藏不住了&#xff01; ——又一家AI初创公司刚刚长成独角兽&#xff0c;这距离其第一次公开露面只过去4个月时间。 最新消息&#xff0c;Adobe前CTO Abhay Par…

“意识机器”初探:如何让大语言模型具备自我意识?

导语 什么是意识&#xff1f;现在的大语言模型具备意识了吗&#xff1f;我们能否造出具备自我意识的机器&#xff1f;在集智俱乐部「后ChatGPT」读书会&#xff0c;北京师范大学系统科学学院教授、集智俱乐部创始人张江老师回顾了意识科学和意识建模领域的进展&#xff0c;认为…

【人工智能AI2.0】清华发布了 ChatGLM-6B 中国大模型5支学术界团队和10大产业界力量介绍

ChatGLM 简介 https://chatglm.cn/login 目录 ChatGLM 简介 ChatGLM 特点 ChatGLM 基于智谱 AI GLM-130B

从脑科学角度解析GPT4及人工智能

来源&#xff1a;图灵教育 本文内容整理自图灵社区直播《对谈 | 刘江 刘嘉&#xff1a;从脑科学 人工智能角度讲透 GPT-4》 刘嘉&#xff0c;清华大学基础科学讲席教授&#xff0c;清华大学心理学系系主任&#xff0c;清华大学脑与智能实验室首席研究员 未来是什么样子&#…

缠论指标缠论指标

点击领取&#xff1a;缠论指标 支持平台 01 通达信(电脑手机&#xff09; 通达信版本简介 02 01 基础版功能&#xff1a; 支持缠论自动分笔&#xff0c;自动线段&#xff0c;显示笔中枢&#xff08;蓝色&#xff09;&#xff0c;线段中枢&#xff08;橙色&#xff09;&am…

tushareAPI获取股票沪深指数

上证指数历史数据采集 ID&#xff1a;503658 代码 # # 导入tushare import tushare as ts # 初始化pro接口 pro ts.pro_api(你自己的TOKEN)# 拉取数据 df pro.index_daily(**{"ts_code": "000001.SH","trade_date": "","st…

同花顺_代码解析_技术指标_P、Q

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 PBX PRICEOSC PSY PSYFS PVT QACD QLCX QLDX PBX 瀑布线 PBX1:(收盘价的M1日移动平均收盘价的M1*2日简单移动平均收盘价的M1*4日简单移动平均)/3 PBX2:(收盘价的M2日移动平均收…

最新和讯网社会责任指数(超详细指标)

1、数据来源&#xff1a;和讯网 2、时间跨度&#xff1a;2011-2020月6日 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 和讯网社会责任指标由50个细分指标构成&#xff0c;全体数据量巨大。费了好大功夫才将这些数据爬取下来&#xff0c;有需要的朋友千万不要错过…

同花顺_代码解析_技术指标_T、U

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 TBR TRIX TRIXFS TWR UDL UOS TBR 新三价率 新三价率:100*上涨家数/(上涨家数下跌家数) MATBR1:TBR的M1日异同移动平均 MATBR2:TBR的M2日异同移动平均 1.指数仍处于下跌状态&a…

通达信下单接口获取指数成份股的步骤分享

通达信下单接口获取指数成份股的步骤分享&#xff1a; ContextInfo.get_sector() 接口&#xff1a;https://gitee.com/metatradeapi 用法&#xff1a; ContextInfo.get_sector(sector, realtime) 释义&#xff1a; 获取板块成份股&#xff0c;只支持取指数成份股 参数&…

【Python】ChatAnywhere,ChatGPT API实现的简易版copilot,能够在word、wps、office中写文档使用,任意软件内可用

Chat-Anywhere 在任意软件内使用快捷键补全选中文本&#xff0c;word和wps中都可以方便的使用, 特性 在任意软件内使用 编写文档的好助手 演示动图 选中文本作为上下文提示&#xff0c;按下快捷键CtrlAlt\激活补全&#xff0c;开始后将会自动逐字输出补全的内容 word中使用 …