常见Code Review过程中发现的问题
软件环境:Spring MVC + MyBatis
主要体现在两个方面,一个是编码习惯问题,另一个是编码质量的问题。编码习惯主要有日志编写、代码注释以及编码风格的问题,而编码质量则与很多方面相关,比如轮子的使用、数据交互、逻辑精简程度等等。下面展开来说
编码习惯问题:
方法体偏长,不易管理维护,可逐步抽取成小方法来减少代码长度。
缺少注释或注释与实现不符,这对后期维护人员是个伤害。
硬编码,随手写的代码或测试时的死数据或常见的公共常量未维护,一旦发生变更,维护的代码量较大
日志缺失或缺少或输出意义不大,一旦发生问题,线上排查难度较大
编码风格比较个性,读起来晦涩难懂,对融入团队是个障碍。
编码质量问题:
重复造轮子的问题,常见工具类使用不到位,经常自己写方法实现。比如Apache commons,Google Guava等。另一个是共用的业务代码,未能提交协商好,造成多个版本实现,后期维护成本上升。
公共数据使用不充分,存在重复调用的情况,而不是一次调用,多次使用,这种情况在与第三方交互的场景中对效率损伤更大。
参数过多时,可转化为对象传参,否则一个方法的参数要加大代码的可维护性。
采用MBG产生的单表的关联查询,但在业务中适合多表关联查的情况下,可多表联查,提高效率。【涉及NDB Cluster存储引擎,跨库Join问题】
代码命名,未能见名知意,这也是一个老生常谈的问题,起个优雅的名字是多么的重要。
代码逻辑不顺畅,存在走弯路的倾向,能精简的代码要反复的重构以达到最优目标。
多余代码,并无实际意义。如有些情况下,先查询,再更新,典型的hibernate的思路,完全可以采用以主键选择更新的方法。
需要异步处理的情况就不要同步处理,以免影响主业务流程效率。比如流程过程中产生的短信、推送通知等,以通知为主要目的的除外。
代码重复,针对功能类似的方法,可添加一个参数加以区分复用。
校验逻辑要提前,防止做无用功。
前后逻辑重复,Controller中作必输校验,Service无须再次校验。
虽标记了FIXME/TODO,却未实际修复,重构不能是一句空话。
何时实施代码重构:
既然发现了问题,我们又该如何把握好节奏来重构我们的代码呢?下面推荐几比较好的重构时机:添加功能时重构、修补错误时重构
、复审代码时重构、时间空余时重构 。
回头审视过去的代码,就像审视我们的过去的编码思路、技巧,要想有所提升成长,就需要反复来重构,以达到一个最优结果。如果只是写过,事后不做复盘重构,对个人成长没有促进作用。
基于SpringCloud的Microservices架构实战案例
Spring
Boot + Elasticsearch 实现索引的日常维护
常见Code Review过程中发现的问题的更多相关文章
- 常见Code Review过程中发现的问题-续
上一篇列举了一些比较常见的Code Review问题列表,文末有链接,可追溯查看.本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来. 测试数据不具有 ...
- 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题
我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...
- 调试过程中发现按f5无法走进jdk源码
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...
- Hive通过查询语句向表中插入数据过程中发现的坑
前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...
- 在网站制作过程中发现的block和inline-block不同。
inline-block,简单来说就是在CSS中通过display:inline-block对一个对象指定inline-block属性,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递.有时既希 ...
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...
- sqlserver2017安装及连接过程中发现的问题
1.SSMS安装报错,如下图 根据搜索资料发现是防火墙的问题,关闭防火墙就行了. 2.连接用户时报错 这个是因为远程连接相关问题. 首先打开服务器远程连接: 其次点击: SqlServer配置管理器- ...
- vue生命周期updated的触发时机之debug过程中发现的firefox问题
现象描述: 断点位置1 谷歌debug的过程: 火狐debug的过程: 只要在改变数据之后有断点停顿,就会先去执行updated函数 断点位置2 此时火狐和谷歌是一样的效果,但是执行顺序是不一致的 谷 ...
- 使用Android studio过程中发现的几个解决R变红的办法
刚开始使用Android studio的时候,好几次碰见新建了一个xml文件,或者new了一个activity之后,Android studio莫名其妙的报错了,而显示红色的地方就是常用的(R.id. ...
随机推荐
- linux命令行模式下实现代理上网 专题
有些公司的局域网环境,例如我们公司的只允许使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是linux纯命令行的界面就....下面简单几步就可以实现了! 一.命令行界面的一般代理设置方 ...
- ELINK离线编程器版本说明
ELINK离线编程器版本详情,ELinkPROG版本与固件版本须匹配使用! 编程器支持芯片详细列表参见 https://www.cnblogs.com/raswin/p/9303300.html
- Windows10 1607 x64/x86 + Office 2016 Win/Mac + KMS激活/安装密钥汇总
各位观众,这里汇总了一份最新微软系统和办公软件的资源清单,希望对你们有帮助. Windows10 1607 For x64 ed2k://|file|cn_windows_10_multiple_ed ...
- mysql 服务压缩包安装,用户创建
wind7上安装mysql记录: 1.下载的包中没有ini配置文件,需要根目录手动创建my.ini文件 内容如下: [client]port=3306default-character-set=utf ...
- 有什么很好的软件是用 Qt 编写的?(尘中远)
作者:尘中远链接:http://www.zhihu.com/question/19630324/answer/19365369来源:知乎 http://www.cnblogs.com/grandyan ...
- 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)
在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但 ...
- 各种 MacBook 和 5K iMac 屏幕分辨率对比
苹果全新 12寸超薄 MacBook 比曾经最薄的 MacBook Air 更薄,不过却配备了Retina 显示屏.12寸 Retina MacBook 上的显示屏分辨率为2304*1440,虽然不如 ...
- 使用VS将 XML/Json 转为Model Class文件
环境: VS2015 Win10 XML例子: <OTA_GetRerStatusRQ EchoToken=" B3BB9248255BD851AC94" UserNam ...
- DLL里面socket(Delphi的代码)
http://hi.baidu.com/game_base/item/f617e4136414148889a956ed 本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发 ...
- 监控打印机(使用OpenPrinter,WaitForPrinterChange API函数)
uses Winapi.WinSpool; procedure TForm1.Button1Click(Sender: TObject);varpi2: PRINTER_INFO_2;hPrinter ...