软件环境:Spring MVC + MyBatis

主要体现在两个方面,一个是编码习惯问题,另一个是编码质量的问题。编码习惯主要有日志编写、代码注释以及编码风格的问题,而编码质量则与很多方面相关,比如轮子的使用、数据交互、逻辑精简程度等等。下面展开来说

编码习惯问题:

  1. 方法体偏长,不易管理维护,可逐步抽取成小方法来减少代码长度。

  2. 缺少注释或注释与实现不符,这对后期维护人员是个伤害。

  3. 硬编码,随手写的代码或测试时的死数据或常见的公共常量未维护,一旦发生变更,维护的代码量较大

  4. 日志缺失或缺少或输出意义不大,一旦发生问题,线上排查难度较大

编码风格比较个性,读起来晦涩难懂,对融入团队是个障碍。

编码质量问题:

  1. 重复造轮子的问题,常见工具类使用不到位,经常自己写方法实现。比如Apache commons,Google Guava等。另一个是共用的业务代码,未能提交协商好,造成多个版本实现,后期维护成本上升。

  2. 公共数据使用不充分,存在重复调用的情况,而不是一次调用,多次使用,这种情况在与第三方交互的场景中对效率损伤更大。

  3. 参数过多时,可转化为对象传参,否则一个方法的参数要加大代码的可维护性。

  4. 采用MBG产生的单表的关联查询,但在业务中适合多表关联查的情况下,可多表联查,提高效率。【涉及NDB Cluster存储引擎,跨库Join问题】

  5. 代码命名,未能见名知意,这也是一个老生常谈的问题,起个优雅的名字是多么的重要。

  6. 代码逻辑不顺畅,存在走弯路的倾向,能精简的代码要反复的重构以达到最优目标。

  7. 多余代码,并无实际意义。如有些情况下,先查询,再更新,典型的hibernate的思路,完全可以采用以主键选择更新的方法。

  8. 需要异步处理的情况就不要同步处理,以免影响主业务流程效率。比如流程过程中产生的短信、推送通知等,以通知为主要目的的除外。

  9. 代码重复,针对功能类似的方法,可添加一个参数加以区分复用。

  10. 校验逻辑要提前,防止做无用功。

  11. 前后逻辑重复,Controller中作必输校验,Service无须再次校验。

  12. 虽标记了FIXME/TODO,却未实际修复,重构不能是一句空话。

何时实施代码重构:

既然发现了问题,我们又该如何把握好节奏来重构我们的代码呢?下面推荐几比较好的重构时机:添加功能时重构、修补错误时重构
、复审代码时重构、时间空余时重构 。

回头审视过去的代码,就像审视我们的过去的编码思路、技巧,要想有所提升成长,就需要反复来重构,以达到一个最优结果。如果只是写过,事后不做复盘重构,对个人成长没有促进作用。

基于SpringCloud的Microservices架构实战案例

介绍几款常用的在线API管理工具

你不得不知的几个互联网ID生成器方案

Spring
Boot + Elasticsearch 实现索引的日常维护

软件生命周期与技术人的职业周期

最新文章

  1. jquery2源码分析系列
  2. php文件写入PHP_EOL与FILE_APPEND
  3. 解决SqlPlus前台程序出现中文乱码的问题
  4. yii2 如何用命名空间方式使用第三方类库
  5. sublime text3 package control 安装
  6. 【转载】 Python 调整屏幕分辨率
  7. iOS 编程思想
  8. Could not create the view: An unexpected exception was thrown 异常处理
  9. Apache和mysql的安装设置
  10. icp算法的一些参考资料
  11. nginx服务配置---php服务接入
  12. .net LINQ and PLINQ
  13. Visual Studio 2013中的新项目对话框
  14. 使用FileSystemWatcher监视文件变化
  15. String.IsNullOrEmpty()和String.IsNullOrWhiteSpace()的区别
  16. 江西省移动物联网发展战略新闻发布会举行-2017年10月江西IDC排行榜与发展报告
  17. 程序员的自我救赎---10.1:APP版本控制系统
  18. visual studio code .net 开发
  19. Chapter 5 Blood Type——15
  20. <转>jmeter(二十一)jmeter常用插件介绍

热门文章

  1. Android Studio gradle编译 NullPointerException(no error message)解决
  2. Linux下基于Bluez
  3. 读unp并动手实践
  4. QT 那些事
  5. Linux文件系统操作与磁盘管理
  6. mysql数据库同步系统otter部署实践(中国与欧洲同步)
  7. QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)
  8. Homebrew 1.0.0 发布,MacOS 上的包管理器,比如安装qt5keychain
  9. SYN2306A型 GPS北斗双模授时板
  10. iOS开发系列之性能优化(上)