软件环境: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. NUGET源不存在,安装Nuget包提示“本地源不存在”

    困扰了两天的问题,终于找到原因了.因此来这里记录一下~ 前两天写项目时,要从NUGET上安装个第三方库,但不管是从可视化的管理器还是管理器控制台安装,都提示“本地源‘*******’不存在”.然后到网 ...

  2. SQLSERVER 数据库备份脚本-支持多库备份

    原文:SQLSERVER 数据库备份脚本-支持多库备份 <pre name="code" class="sql">--变量定义 DECLARE @b ...

  3. CNN(卷积神经网络)、RNN(循环神经网络)和DNN(深度神经网络)

    本文转载修改自:知乎-科言君 感知机(perceptron) 神经网络技术起源于上世纪五.六十年代,当时叫感知机(perceptron),拥有输入层.输出层和一个隐含层.输入的特征向量通过隐含层变换达 ...

  4. MySQL 其它基本操作

    索引 所谓索引,就是类似于书的目录,目的也类似,都是为了提高检索速度.ALTER TABLE <表名> ADD INDEX <索引名(列名)>;或者CREATE INDEX & ...

  5. 给变量赋值,程序会跳到 HardFault_Handler的问题

    原因:变量属于指针,该指针没有初始化

  6. Office Add-In 应用类型及平台支持

    原文地址: http://simpeng.net/office-add-in/office-add-in-%e5%ba%94%e7%94%a8%e7%b1%bb%e5%9e%8b%e5%8f%8a%e ...

  7. 纯CSS3创意loading文字特效

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  8. 跨平台网络通信与服务器框架 acl 3.2.0 发布,acl_cpp 是基于 acl 库的 C++ 库

    acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...

  9. 这里有123个黑客必备的Python工具!

    123个Python渗透测试工具,当然不仅于渗透~ 如果你想参与漏洞研究.逆向工程和渗透,我建议你时候用Python语言.Python已经有很多完善可用的库,我将在这里把他们列出来. 这个清单里的工具 ...

  10. 在本地安装RabbitMQ Server教程以及可能遇到的问题及解决办法

    1. Download latest erlang OTP platform from : erlang:http://www.erlang.org/download.html (The latest ...