软件环境: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 实现索引的日常维护

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

常见Code Review过程中发现的问题的更多相关文章

  1. 常见Code Review过程中发现的问题-续

    上一篇列举了一些比较常见的Code Review问题列表,文末有链接,可追溯查看.本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来. 测试数据不具有 ...

  2. 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题

    我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...

  3. 调试过程中发现按f5无法走进jdk源码

    debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...

  4. Hive通过查询语句向表中插入数据过程中发现的坑

    前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...

  5. 在网站制作过程中发现的block和inline-block不同。

    inline-block,简单来说就是在CSS中通过display:inline-block对一个对象指定inline-block属性,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递.有时既希 ...

  6. VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug

    今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...

  7. sqlserver2017安装及连接过程中发现的问题

    1.SSMS安装报错,如下图 根据搜索资料发现是防火墙的问题,关闭防火墙就行了. 2.连接用户时报错 这个是因为远程连接相关问题. 首先打开服务器远程连接: 其次点击: SqlServer配置管理器- ...

  8. vue生命周期updated的触发时机之debug过程中发现的firefox问题

    现象描述: 断点位置1 谷歌debug的过程: 火狐debug的过程: 只要在改变数据之后有断点停顿,就会先去执行updated函数 断点位置2 此时火狐和谷歌是一样的效果,但是执行顺序是不一致的 谷 ...

  9. 使用Android studio过程中发现的几个解决R变红的办法

    刚开始使用Android studio的时候,好几次碰见新建了一个xml文件,或者new了一个activity之后,Android studio莫名其妙的报错了,而显示红色的地方就是常用的(R.id. ...

随机推荐

  1. WPF自定义窗口最大化显示任务栏

    原文:WPF自定义窗口最大化显示任务栏 当我们要自定义WPF窗口样式时,通常是采用设计窗口的属性 WindowStyle="None" ,然后为窗口自定义放大,缩小,关闭按钮的样式 ...

  2. layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法

    var frameId = $(layero).find("iframe").attr('id');//父页面获取子页面的iframe var id = $(window.fram ...

  3. 【Linux】简单明了查看内存使用和ubuntu的版本号及位数

    1.查看ubuntu的版本号:cat /etc/issue 2.查看系统是32位的还是64位:getconf LONG_BIT 3.查看内存使用 free free命令可以用来查看系统内存使用情况,- ...

  4. nginx 负载均衡,多站点共享Session

    原文:nginx 负载均衡,多站点共享Session nginx 负载均衡,多站点共享Session 多站点共享Session常见的作法有: 使用.net自动的状态服务(Asp.net State S ...

  5. Windows界面编程第五篇 静态控件背景透明化(13篇)

    上一篇<Windows界面编程第三篇 异形窗体 普通版>和<Windows界面编程第四篇异形窗体 高富帅版>介绍了异形窗口(异形窗体)的创建,并总结出了异形窗口的“三要素”: ...

  6. 在Azure中新建Linux

    开始学习Linux,这里开个系列用来记录Linux的学习笔记,这些是在实验楼:https://www.shiyanlou.com/的学习笔记. 这一篇是在Azure中新建一个Ubuntu的服务器用于练 ...

  7. Android卡片设置透明度失效问题

    最近在做蓝牙电话项目,需要支持双路通话,涉及到通话卡片透明度调节,当正在通话中,有新的来电时,原来的通话卡片需要做成30%的透明度,本来很简单的一个小改进,但通过 setAlpha()接口总是失效!  ...

  8. ASP.NET Core Linux 发布

    这篇博客参考了以下文章: 1.http://www.cnblogs.com/ants/p/5732337.html 2.http://www.linuxidc.com/Linux/2016-11/13 ...

  9. Git 常用命令大全(转)

    Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone g ...

  10. 原生Js汉语拼音首字母匹配城市名/自动提示列表

    根据城市的汉语名称首字母把城市排序,基本思路: 1.处理数据,按照需要的格式分别添加{HOT:{hot:[],ABCDEFG:{a:[1,2,3],b:[1,2,3]},HIGHLMN:{},OPQR ...