百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

由 Mybatis 源码畅谈软件设计(一):序

csdh11 2025-01-26 21:48 27 浏览

作者:京东保险 王奕龙

从接触软件开发以来,一直对写出优雅的代码抱有执念,工作半年时,偶然接触到《代码整洁之道》,爱不释手,一口气读完,并在很长的时间内践行其中的观点,但是在这践行期间缺少思考和复盘,更多的是一味地信奉和遵守其中的原则,写了不少当时自认为不错而现在回过头看可读性不好的“坏代码”。

后来在员工培训时,导师介绍 《Head First 设计模式》 是影响他最大的一本书。我花了个把月读完,才渐渐理解设计原则和设计模式,并在项目中实际应用。慢慢地,开始考虑怎么设计更好,怎么解耦,怎么复用,如何满足开闭原则等等,虽然也经历过硬用设计模式的情况,但是我觉得这段时间对写代码的能力提升很多。

再后来对代码整洁有了新的理解是在读《软件设计哲学(第二版)》,其中提到的关于如何“提高可读性,降低复杂性”的观点是我之前没有接触过的,后来在对业务接口重构和代码评审中实践了其中的原则。这给了我一种别样的感觉:写好代码不再是“炫技”,而是时刻考虑“这段代码这么写,它好读吗?”,始终站在读者的角度去思考,将需求引入的复杂度降到最低。

有时候我也在考虑一个问题:在系统迭代的过程中,新功能的引入和开发人员的更替都可能会导致复杂性增加,进而使系统可维护性和可扩展性降低。但我却很少看到有团队花精力关注这件事情,通常是永不停止的需求迭代,等复杂性积累到一定程度,无法再满足业务需求时选择重构,而重构时面对欠维护的代码,需要再投入大量人力梳理、评估和研发设计,并且重构时大规模改动也伴随着产生 Bug 的风险,如果没有详细的测试用例或者没有对业务熟悉的测试工程师,该风险还会变大。此外,在中文互联网社区内也很少看到有我们国人写出的关于如何设计程序或什么是好的程序的内容或书籍,在程序员内比较流行的依然是08年出版的《代码整洁之道》,不得不说其中的观点并没有与时俱进,而适宜当前开发环境的《软件设计哲学(第二版)》是近两年的书籍,限于没有中文版导致传播范围有限。那我能帮大家做一些相关的事情吗?因为我觉得即使是老外写的较好的内容,面向的第一手开发者依然是以英语为母语的,适用于英语语境下的原则可能放在国内开发环境下并不适用。但限于能力和经验,也许我并不能将此写的很好,也希望大家能做勘误和内容补充,即使最后它没有非常棒的内容,那么能为新人开发者提供一些经验,少走一些弯路也是好的吧?

本专栏的内容基于我的开发、重构经验和一些代码整洁相关的书籍,主要参考书籍我会一一放在文末,也推荐大家去读原书。但是限于不能以实际业务开发代码为例,我一直在考虑以什么内容来承载这些,最终决定以 Mybatis 源代码为支撑,首先因为它足够简单,再就是源码采用了极简代码的风格,大家能够在追随源码的过程中,了解何时方法应该被拆分以增加可读性,何时书写长代码也是合适的,此外,还有一点是源码中注释信息很少,希望大家能在源码的阅读过程中了对“代码自解释”有自己的认识。在源码解析过程中,我会提到一些设计模式和原则,但更重要的是 自己真正深入到每一行代码中去研究才能真正理解,好代码永远都是写出来的而不是看出来的。除了了解这些方法以外,最重要的是希望大家能在平时工作中多应用和交流,多多参加代码评审,阅读其他人的代码,因为在读别人的代码时,更容易发现其中可读性差的点。希望大家能写出整洁、易维护和易扩展的代码,并能从中获取到软件设计和软件开发的快乐。

Mybatis 源代码中提供了非常完整的单元测试,文章中流程均采用其中单测进行验证,大家可点击如下链接下载源代码。

  • [下载]Mybatis 源码参考源码

在所有内容开展之前,我想先给大家铺垫一个设计原则,它也是《软件设计哲学》中提到的最让人眼前一亮的观点:坚持“深”模块设计,如下图所示:

它会将每个模块看作一个矩形,矩形的面积代表模块提供的功能,顶部边缘代表模块公开出的接口,边缘长度代表接口的复杂性,越长接口越复杂。设计较好的模块会比较深,因为它在简单的接口后隐藏了许多功能,其内部的复杂性只有一小部分对开发者可见。坚持深模块设计也就意味着提供调用简单但功能强大的接口。

在接下来的内容中,请大家带着这个原则,并在阅读源码过程中时时考虑“这样设计够深吗?”,相信大家能对软件设计有更好的理解和认识。

巨人的肩膀

  • [美]John Ousterhout.(2021).软件设计哲学(第二版)[M].San Francisco:Yaknyam Press
  • [美]Robert C. Martin.(2020).代码整洁之道[M].韩磊,译.北京:人民邮电出版社
  • [美]Elisabeth Freeman,Eric Freeman,Bert Bates,Kathy Sierra,Elisabeth Robson.(2007).Head First 设计模式[M].O'Reilly Taiwan公司,译.北京:中国电力出版社
  • [美]Martin Fowler.(2019).重构(第2版)[M].熊节,林从羽,译.北京:人民邮电出版社
  • [美]David Thomas,Andrew Hunt.(2020).程序员修炼之道(第2版)[M].云风,译.北京:电子工业出版社
  • [美]Robert C. Martin.(2016).代码整洁之道:程序员的职业素养[M].余晟,章显洲,译.北京:人民邮电出版社
  • [日]结城浩.(2017).图解Java多线程设计模式[M].侯振龙,杨文轩,译.北京:人民邮电出版社
  • Mybatis: 中文官方文档
  • Github: How To Read Code
  • Bilibili: MyBatis源码阅读指南

相关推荐

知名软件变“木马”:2小时感染10万电脑

近日,腾讯电脑管家监测发现,一款通过“驱动人生”升级通道,并同时利用“永恒之蓝”高危漏洞传播的木马突然爆发,仅2个小时受攻击用户就高达10万。腾讯电脑管家可精准拦截该病毒攻击,管家团队也将持续跟踪该款...

腾讯电脑管家发布病毒预警:“驱动人生木马”爆发,2小时感染10万台电脑

新华网天津12月15日电(记者周润健)腾讯电脑管家15日紧急发布病毒预警,14日下午,腾讯电脑管家监测发现,一款通过“驱动人生”升级通道,并同时利用“永恒之蓝”高危漏洞传播的木马突然爆发,仅2个小时受...

全新“撒旦”勒索病毒来袭 瑞星推出独家解密工具

新华社北京7月26日电瑞星威胁情报平台近日发现多起国内用户感染“撒旦”勒索病毒事件。据瑞星安全研究人员介绍,该病毒运行后会加密受害者计算机文件,加密完成后会用中英韩三国语言索取1个比特币作为赎金,并...

新勒索病毒“WannaCry”疯狂来袭 乌克兰副总理电脑中招

据外媒报道,从6月27日开始,一种新勒索病毒再次疯狂来袭,已席卷欧洲多个国家,连乌克兰副总理的电脑都已中招。报道称,这轮病毒足以与五月席卷全球的勒索病毒“WannaCry”的攻击性相提并论。该病毒代号...

蠕虫病毒利用“永恒之蓝”漏洞传播 单位局域网受威胁最大

日前,火绒安全团队通过“火绒威胁情报系统”发现蠕虫病毒“Worm/Sharp”正在全网传播,其中在政府、企业、学校、医院等单位的局域网具有非常强的传播能力。该病毒通过“永恒之蓝”漏洞、多个电脑常用端口...

新病毒爆发:利用“永恒之蓝”传播,2小时感染10万台电脑挖矿

驱动人生发布的声明。据腾讯安全专家介绍,通过追溯病毒传播链发现,该病毒自12月14日约14点,利用“驱动人生”、“人生日历”等软件最早开始传播,另有约30%的传播通过“永恒之蓝”漏洞在局域网内进行主动...

逍遥安卓模拟器定制手游电脑版 手机电脑账号完全互通

从今年起大量回合制端游转向手游方向,无论是《梦幻西游》、《大话西游》、《神武》还是刚刚发行的《问道》手游,都是非常重度需要大量时间来做任务挂机升级的游戏。很多人习惯了端游的时候一个电脑可以多开的玩法,...

安卓模拟器绿色U盘移动版 公司玩游戏无痕迹

安卓模拟器已经不稀奇了!随着安卓手游的盛行,特别是《梦幻西游手游》之类的重度手游发布,玩手游花的时间也越来越多。用手机玩这些游戏存在着屏幕小、点量少、费流量还有容易被电话打断,在电脑上用安卓模拟器玩游...

苹果推出 iCloud 照片和视频转移服务:可转移至谷歌相册

IT之家3月4日消息据MacRumors今日报道,苹果公司本周推出了一项新服务,帮助iCloud用户方便快捷的将其存储的照片和视频转移到谷歌照片上。苹果在其支持文档中表示,用户可以登...

NAS PK台,4核带m.2的威联通TS-264C vs 双核TS-462C

因为618年中大促看到威联通TS-264C和TS-462C这两机型售价差不多,就做个比较以供参考。毕竟作为自2007年以来就一直卖威联通的NAS老油来说,对威联通各NAS机型的识别还是相当全面的,对不...

前端学AI(七):构造 RAG 系统评估测试数据集

引言在基于DeepSeek+Chroma+LangChain开发一个简单RAG系统...

惨重教训!调查显示挪威“英斯塔”号宙斯盾舰撞油轮后本不必“丧命”

最新公布的调查报告显示,挪威皇家海军“英斯塔”号护卫舰2018年11月与油轮相撞后,如果其舰员接受了更好的损管训练,并且对舰艇的稳定特性更加熟悉的话,这艘宙斯盾型战舰本来是可以挽救的。↑挪威“英斯塔”...

「必买」盘点2021年男人们的败家清单,越“败”越香

心里总想买点啥?看看《必买》,全网最有料的场景种草指南。草原割不尽,春风吹又生。在过去的2021年,不断被各种数码产品种草,一直在买买买,剁手不停。大部分产品都经过详细的对比做足了功课,也有部分是一时...

实现浏览器播放rtsp视频流的解决方案

有同学问道:需要实时播放摄像头rtsp视频流,而浏览器不能直接播放,怎样解决?实现这个需求可以通过插件或者转码来实现。要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一些开源的...

ISO9000你知道多少?

1ISO9000族标准是什么?ISO9000族标准是指由国际标准化质量管理和质量保证技术委员会(ISO/TC176)制订的所有国际标准。ISO9000族标准可帮助各种类型和规模的组织实施并有效运行质...