作者:小傅哥
博客:https://bugstack.cn

一、前言

我们不一样,就你没对象! 对,你是面向过程编程的!

我说的,绝大多数码农没日没夜被需求憋着肝出来的代码,无论有多么的吭哧瘪肚,都不可能有重构,只有重新写。为什么?因为重新写所花的时间成本,远比重构一份已经烂成团的代码,要节省时间。但谁又不敢保证重写完的代码,就比之前能好多少,况且还要承担着重写后的代码事故风险和几乎体现不出来的业务价值

虽然代码是给机器运行的,但同样也是给人看的,并且随着每次需求的迭代、变更、升级,都需要研发人员对同一份代码进行多次开发和上线,那么这里就会涉及到可维护易扩展好交接的特点。

而那些不合理分层实现代码逻辑、不写代码注释、不按规范提交、不做格式化、命名随意甚至把 queryBatch 写成 queryBitch 的,都会造成后续代码没法重构的问题。那么接下来我们就分别介绍下,开发好能重构的代码,都要怎么干!

二、代码优化

1. 约定规范

# 提交:主要 type
feat:     增加新功能
fix:      修复bug# 提交:特殊 type
docs:     只改动了文档相关的内容
style:    不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
build:    构造工具的或者外部依赖的改动,例如webpack,npm
refactor: 代码重构时使用
revert:   执行git revert打印的message# 提交:暂不使用type
test:     添加测试或者修改现有测试
perf:     提高性能的改动
ci:       与CI(持续集成服务)有关的改动
chore:    不修改src或者test的其余修改,例如构建过程或辅助工具的变动# 注释:类注释配置
/**
* @description:
* @author: ${USER}
* @date: ${DATE}
*/
  • 分支:开发前提前约定好拉分支的规范,比如日期_用户_用途,210905_xfg_updateRuleLogic
  • 提交作者,type: desc 如:小傅哥,fix:更新规则逻辑问题 参考Commit message 规范
  • 注释:包括类注释、方法注释、属性注释,在 IDEA 中可以设置类注释的头信息 Editor -> File and Code Templates -> File Header 推荐下载安装 IDEA P3C 插件 Alibaba Java Coding Guidelines,统一标准化编码方式。

2. 接口标准

在编写 RPC 接口的时候,返回的结果中一定要包含明确的Code码Info描述,否则使用方很难知道这个接口是否调用成功还是异常,以及是什么情况的异常。

定义 Result

public class Result implements java.io.Serializable {private static final long serialVersionUID = 752386055478765987L;/** 返回结果码 */private String code;/** 返回结果信息 */private String info;public Result() {}public Result(String code, String info) {this.code = code;this.info = info;}public static Result buildSuccessResult() {Result result = new Result();result.setCode(Constants.ResponseCode.SUCCESS.getCode());result.setInfo(Constants.ResponseCode.SUCCESS.getInfo());return result;}// ...get/set
}

返回结果包装:继承

public class RuleResult extends Result {private String ruleId;private String ruleDesc;public RuleResult(String code, String info) {super(code, info);}// ...get/set
}// 使用
public RuleResult execRule(DecisionMatter request) {return new RuleResult(Constants.ResponseCode.SUCCESS.getCode(), Constants.ResponseCode.SUCCESS.getInfo());
}

返回结果包装:泛型

public class ResultData<T> implements Serializable {private Result result;private T data;public ResultData(Result result, T data) {this.result = result;this.data = data;}   // ...get/set
}  // 使用
public ResultData<Rule> execRule(DecisionMatter request) {return new ResultData<Rule>(Result.buildSuccessResult(), new Rule());
}
  • 两种接口返回结果的包装定义,都可以规范返回结果。在这样的方式包装后,使用方就可以用统一的方式来判断Code码并做出相应的处理。

3. 库表设计

三范式:是数据库的规范化的内容,所谓的数据库三范式通俗的讲就是设计数据库表所应该遵守的一套规范,如果不遵守就会造成设计的数据库不规范,出现数据库字段冗余,数据的查询,插入等操作等问题。

数据库不仅仅只有三范式(1NF/2NF/3NF),还有BCNF、4NF、5NF…,不过在实际的数据库设计时,遵守前三个范式就足够了。再向下就会造成设计的数据库产生过多不必要的约束。

0NF

  • 第零范式是指没有使用任何范式,数据存放冗余大量表字段,而且这样的表结构非常难以维护。

1NF

  • 第一范式是在第零范式冗余字段上的改进,把重复字段抽离出来,设计成一个冗余数据较少便于存储和读取的表结构。
  • 同时在第一范式中也指出,表中的所有字段都应该是原子的、不可再分割的,例如:你不能把公司雇员表的部门名称和职责存放到一个字段。需要确保每列保持原子性

2NF

  • 满足1NF后,要求表中的列,都必须依赖主键,确保每个列都和主键列之间联系,而不能间接联系,也就是一个表只能描述一件事情。需要确保表中的每列都和主键相关。

3NF

  • 不能存在依赖关系,学号、姓名,到院系,院系到宿舍,需要确保每列都和主键列直接相关,而不是间接相关。

反三范式

三大范式是设计数据库表结构的规则约束,但是在实际开发中允许局部变通:

  1. 有时候为了便于查询,会在如订单表冗余上当时用户的快照信息,比如用户下单时候的一些设置信息。
  2. 单列列表数据汇总到总表中一个数量值,便于查询的时候可以避免列表汇总操作。
  3. 可以在设计表的时候冗余一些字段,避免因业务发展情况多变,考虑不周导致该表繁琐的问题。

4. 算法逻辑

通常在我们实际的业务功能逻辑开发中,为了能满足一些高并发的场景,是不可能对数据库表上锁扣减库存、也不能直接for循环大量轮训操作的,通常需要考虑

还重构?就你那代码只能铲了重写!相关推荐

  1. 还重构?就这代码只能铲了重写!

    往期热门文章: 1.是怎么样的SQL优化能做到 900W+数据,从17s到300ms? 2.再见 BeanUtils!对比 12 种 Bean 自动映射工具,就它性能最拉跨! 3.暴力拒绝白嫖,著名开 ...

  2. 不要写完代码就束之高阁,适当地优化代码结构,能够为以后的开发带来许多方便,这《重构:改善既有代码的设计》就向你介绍了这方面的技巧,说得非常详细。...

    "不要写完代码就束之高阁,适当地优化代码结构,能够为以后的开发带来许多方便,这<重构:改善既有代码的设计>就向你介绍了这方面的技巧,说得非常详细." "程序几 ...

  3. 经验总结 | 重构让你的代码更优美和简洁

    1. 前言 最近,笔者有幸对高德打车订单Push项目进行了重构,与大家分享一下代码重构相关的工作经验,希望对大家有所启发. 有时候,我们在做某个功能需求时,需要花掉大量的时间,才能找到和需求有关联的代 ...

  4. 重构-改善既有代码的设计:重构原则(二)

    1.什么是重构 重构(Refactoring):在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性.可扩展性和可重用性而对软件进行的改造,对代码内部的结构进行优化. 2.为何重构 ...

  5. PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性

    思维导图 索引: Ø Move Method(搬移函数) Ø Move Field (搬移值域) Ø Extract Class (提炼类) Ø Inline Class (将类内联化,就是把当前的类 ...

  6. 『重构--改善既有代码的设计』读书笔记----序

    作为C++的程序员,我从大学就开始不间断的看书,看到如今上班,也始终坚持每天多多少少阅读技术文章,书看的很多,但很难有一本书,能让我去反复的翻阅.但唯独『重构--改善既有代码的设计』这本书让我重复看了 ...

  7. 重构改善既有代码设计

    目录 一.什么是重构 二.重构的目的和时机 2.1 目的 2.1.1 改进软件的设计 2.2.2 使软件更容易理解 2.2.3 帮助找到 BUG 2.2.4 提高编程速度 2.2 重构的时机 2.3 ...

  8. 实践提高《重构改善既有代码的设计第2版》PDF中文+PDF英文+对比分析

    重构是编程的基础,是在不改变外部行为的前提下,有条不紊地改善代码.编程爱好者都知道,Martin Fowler 的<重构:改善既有代码的设计>已经成为全球有经验的程序员手中的利器,既可用来 ...

  9. 【《重构 改善既有代码的设计》学习笔记2】重构原则

    [<重构 改善既有代码的设计>学习笔记2]重构原则 本篇文章的内容来自<重构 改善既有代码的设计>一书学习笔记整理并且加上自己的浅显的思考总结! 上一篇通过一个简单的例子体验了 ...

最新文章

  1. JAVA基础6-函数
  2. 【Win32API】SendInput ERROR_BUSY 错误原因
  3. db和model用哪个开发大型项目 thinkphp_Java程序员开发大型应用程序时,必须要掌握几个的技巧...
  4. redis 源码 ziplist.c 压缩list的实现
  5. hadoop关联文件处理
  6. 质性研究工具_质性研究【001】
  7. 第七章:跨程序共享数据-探究内容提供器
  8. 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)
  9. web自动化如何在不同浏览器运行_如何给树莓派搭建WEB开发运行环境之JAVA篇
  10. 响应式布局之网站头部导航
  11. objdump: ‘1443.14.0)‘: No such file or directory
  12. 毕业设计之 --- 基于大数据分析的金融产品销售预测分析
  13. office2007每次打开都配置进度_win7下office2007总是配置进度怎么办-解决office2007显示配置进度的方法 - 河东软件园...
  14. 269个JavaScript工具函数,助你提升工作效率(上)
  15. webRtc-streamer简单使用-备份
  16. python实现某网站的音乐下载
  17. python ASF API下载Sentine-1数据
  18. 有时间 多研究研究开源项目 必有收获
  19. redies的单例安装
  20. 闲置物品交易转让求购发布信息​小程序开发

热门文章

  1. Python实战:病毒困我于斗室,桌面带我去旅行
  2. android 测试屏幕触点,如何检测Android Studio中的后台服务是否触摸了屏幕?
  3. PHP仿途牛,仿途牛APP源码分享
  4. zkeys阿帕云快捷登录插件,支持十几种登录方式
  5. android监听来电去电广播
  6. 裸辞3个月没工作,害怕面试,害怕HR问我的问题,怎么办?
  7. html多余字不显示,html5多出来的字自动隐藏并显示...
  8. 【动画演示软件】Focusky教程 | 设置面板控制及管理
  9. A星搜索 (A* Search)
  10. 中国第一届EOS柚子节|EOS王团长中国行北京见面会圆满收官