前言
正在摸鱼的我突然被项目经理拍了拍我的肩膀,糟糕摸鱼被发现了!好消息是没有发现我摸鱼,坏消息是来活了,目标是重构一个教育系统的项目,因为公司有款低代码产品推广,要接外面的客户来推广落地,积累方案,不凑巧我被安排来实现这个项目了。
项目经理👨:来吧开干!甩了一个他们老项目的地址过来:xxx
我🙎♂️:?没了?
项目经理👨:没了
我🙎♂️:源码有吗?数据库有吗?
项目经理👨:没,数据库有套新的,他们找别人拿的题库,我们要在别人题库的基础上继续开发实现他们的功能。
我🙎♂️:好好好,天崩开局。
项目经理👨:补充一下,由于我们得赶进度,教师端留给你们的时间只有两个星期开发,单元测试也不能少!。
我🙎♂️:谁说重构这项目差的,这项目也太棒了!(邪恶栀子花计划酝酿~)
了解业务🔍
开发之前别着急,理清思路最重要。重构项目的时候最忌讳就是认为业务简单直接来干!通过我之前血淋淋的教训来总结,敲代码才是最简单的一步,理清思路最重要!因为不是有可以借鉴的系统嘛,我干的第一件事!就是先将系统狠狠的《蹂躏》了一遍,我怎么开心怎么来,狠狠的玩耍,但是在这过程中也加深了对他们的业务系统的了解程度,不像简单的纸上谈兵!
狠狠画的关系图🎨
可能有很多人开发会觉得一些数据库 ER 图画起来麻烦又复杂,我之前也是这么认为的,我感觉需要什么关系直接去数据库看不就好了,画来干嘛,像之前有外键的时候关系图还能直接用工具生成,现在大多数都是逻辑外键了,具体逻辑只有人知道,有个关系图真的在后面开发的时候帮助我起到了大作用,可以说我的速度一半都是这张图给的,给大家看看我画的一张数据库关系图,虽然简陋了点,但是你可以直接一眼通过关系以及线上的关系来清楚了解到实体之间的关系状况。
前人照搬🌄
对于接口我当时是一点都不了解的,只能通过 f12 去控制台查看,然后一个一个摘抄下来,后面再根据自己的理解来对每个接口入参和反参进行中文解释描述,还有一些不懂的先抄下来,再向有关负责人提出疑问。这时候就有兄弟说了,这个不浪费时间嘛,我一个一个接口弄下来,我都开发完了!漏!因为我们是重构,不能按照自己的想法想怎么样就怎么样,你肯定需要先保持之前系统的大部分逻辑不变的情况下,再来进行调整,这样后面改起来也是有所依据。
有聪明的帅*就问了!聪!有没有什么快捷的方法能帮助我快速的将接口拿下来放到接口文档中!!当然有!我就是这么干地!请看我操作🔽:
1、打开电脑控制台 F12
2、点击图中的 Copy as cURL(bash)
3、打开 Apifox
导入就可以啦!不用再担心繁琐的手填接口字段配置
理清思路💖
如何理清思路,我是用了以下几个步骤,让我的开发效率提高了 78% ,思路如下🔽:
1、审查旧的接口文档
- 结合目前提供的页面以及自己导入进来的接口文档,来比对那些字段是页面用到的,在这个过程中,我就发现其实接口返回的参数有很多前端页面中根本没用到,比如:isDelete 这种是否删除逻辑字段前端根本不关心,返回出去也没有意义,这就可以在我们的接口设计中直接删除这个字段的返回。
- 统一了接口的请求格式,在以前的旧版接口中,又有 Path 传参 + Param 传参 + Body 传参,各种混在一起用,重构的时候统一风格,查询的时候用 GET 的 Param 传参,涉及数据变化等操作统一使用 POST 的 Body 传参。
2、定好开发使用到的 DTO 、VO 以及单元测试
- 定好 DTO 、VO 很多朋友能理解,就是根据上面定下来的接口文档来进行设计开发,这样入参和反参都是固定好的,后面只剩下中间的业务逻辑罢了,这样就能快速提升后面的开发效率啦,不用再担心接口的返回值问题。
- 但是先写单元测试这个理解呢,我是这样认为的,既然接口入参和反参都能知道,那么我们是不是能先预想到每个接口逻辑的正确返回应该是怎么样的呢,举个🌰:我的新增接口的预期返回肯定是新增数据的 ID,那么我写单元测试的时候是不是可以添加断言来初步判断如果返回 ID 不为空,那我这个接口的基本逻辑就完善了呢,后面还有遗漏的可能还需要补充其他单元测试,但是大概框架已经搭好。
3、写代码时先写注释
-
我是如何保证我写代码下来的时候思路是清晰的呢,我先将整体逻辑用注释描述起来,再对每一行注释所标注的步骤一步一步的编写代码,在这过程中有些很简单的逻辑,通过 IDEA 的 AI 插件有时候就直接帮你生成出来了,效率++。
下面是一个写注释的简单模板:
//1、校验逻辑 //2、查询xxx //3、绑定xxx //4、定义 VO 返回
-
对于定义 VO 返回,我有一个小技巧!很多人定义 VO 的时候会不会有遗漏一些参数忘记设置,我是这样做的:
1、下载 IDEA 插件
2、使用方法 .allset
3、定义获取到每一行的 set,直接按照顺序一步步赋予参数值。
结尾⭐
做好上面这些方法,可能会帮助你提升开发重构效率高不少,这些是我实际中能用到了一些方法,如果你们还有更好的方法欢迎大家一起来交流讨论。
我是聪 希望可以跟大家一起学习,我的 Github:github.com/lhccong 如果里面有你感兴趣的项目不妨给我点个星星⭐和关注🔥,未来我还会持续写新的好玩的小项目。