文档章节

JDK8新特性:default方法的应用实践

o
 osc_gu9d45li
发布于 2019/04/10 10:56
字数 770
阅读 0
收藏 0

背景:
  最近维护一个老旧工程,遇到集团层面的数据安全改造,需要在DAO层做加解密改造。而这个老旧工程的DAO层是用的JdbcTemplate实现的,尽管template方式实现起来可自由发挥的空间很大,但是因为跟其他其他服务的技术栈不统一,无法实现统一加解密,所以考虑把JdbcTemplate升级到Mybatis。

过程:
  升级的关键问题就是原来的 xxDaoImpl类里写了大量的业务逻辑(显然,程序员们在这里没有很好的遵循开发规范),而Mybatis是通过对Dao接口做动态代理并映射到 xxMapper.xml上的(底层是用的JDK动态代理,不能直接对实现类做增强,所以只能改成接口的方式),那么DAO大段大段的逻辑将无处安放,需要做迁移,要么往上迁到service层,要么通过Mybatis的动态sql转换到xml里,然而很不巧的是这个老旧工程是个核心工程,很多服务都直接依赖了它(Dao层依赖),所以把业务逻辑都往上提的话又是一项巨大的工程而且没法保证逻辑迁移时的正确性,对测试的同学来说又是一场灾难(因为我们给出的测试范围就是:所有业务都要测。。)

  经过一番抓耳挠腮后,灵机一动想到了default方法(当初JDK团队引进这个特性就是为了兼容扩展已有接口),我们遇到的场景跟default方法的使用场景非常匹配,把 xxDaoImpl改成接口后,还可以把那一坨一坨的逻辑留在DAO层,而且经过测试,default方法也是可以被代理增强的,所以不会影响Mybatis的Interceptor,也不会影响统一的加解密安全改造。

(截图里还用到了Mybatis-plus,Mybatis的好CP,给他们打个硬广:https://mp.baomidou.com/guide/

至此:

  目前升级改造的技术方案已经验证完毕,再说点感想吧:有时候自己想想,上面的方案有点点Hack的精神,虽然通过技术解决问题是程序员最大的满足和自豪,但是软件、系统、项目等等终究是工程化的东西,按照正常的演进思路就是应该做重构,让编码更符合规范,也为以后的框架升级留够足够的兼容性。但是,作为互联网项目,生命周期短以及朝不保夕是家常便饭的事情,而且一般都是以业务为驱动的,公司要的是爆发式的增长,对技术团队的要求就是能快速响应,持续交付性能强大基本可靠的产品,而对于产品本身的规范性并没有思考的太多,不像传统的大型软件项目,严格按照瀑布模型来工程化的演进。

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

pycurl libcurl link-time ssl backend (nss)

pip uninstall pycurlecho 'pycurl==7.19.5.1 --global-option="--with-nss"' > requires.pypip install -r requires.py...

小红手
45分钟前
17
0
计算机网络性能衡量

1、速率 单位时间(s)内传输信息(bit)量 单位:KB/s, MB/s, Gb/s K = 10^3 ,M = 10^6, G=10^9 一般表示的是理想的传输速率 2、带宽 计算机网络中的带宽和通信等领域的带宽概念不一样,计算机网...

osc_np3y0rbq
45分钟前
3
0
互联网掀起农家乐,巨头上演AI掘金战

配图来自Canva **前有网易、阿里AI养猪,后有腾讯AI养鹅,互联网大佬们纷纷玩起了“农家乐”,互联网的生意在尖端技术的引领之下频频跨界,巨头之间的较量也从线上延伸至线下。**自古“民以食...

osc_5cok9i01
47分钟前
9
0
原来!我在4年前就开始体验雾游戏了!

前有云游戏后有雾游戏,游戏的方式看来起来越来越多种多样。那么“震撼业界”的雾游戏到底是什么来头?它依靠什么改变游戏界?它的原理又是什么? 本月月初,著名的日本游戏杂志《Fami通》表...

osc_j34n26zn
48分钟前
11
0
活动预告|田溯宁与你相约GSMA Thrive·万物生晖,分享5G风口下的创新与投资洞察

在万物互联的时代背景下,5G+AI+IoT的技术变革与融合,正在引发一场深刻的全产业创新与变革。5G技术创新、行业应用及投资机遇已成为科技行业所瞩目的焦点。 6月30日,宽带资本董事长田溯宁将...

osc_0qnrwmy3
49分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部