经验分享:如何快速上手公司的项目代码

您所在的位置:网站首页 懂了么要怎么才能注册 经验分享:如何快速上手公司的项目代码

经验分享:如何快速上手公司的项目代码

2024-07-11 01:45| 来源: 网络整理| 查看: 265

经验分享:如何快速上手公司的项目代码 前言阅读项目代码的步骤把项目先运行起来了解项目后端架构情况观察项目的目录结构观察数据库表状况 深入项目,阅读代码从被调用的接口入手理解整个操作的逻辑给关键代码加上注释 阅读项目代码的四大原则跑不起来的代码不读,用不到的代码暂时不读以功能逻辑为主,不要死抓细节虚心请教,学会提问勤记笔记,多画图 后记

前言

来公司实习也一个多星期了,基本上啥事也没干,主要就是看公司项目的代码。坦白说,第一次接触到这种实际的项目中来,确实和平时所能接触到的项目代码很不一样。平时无论是自己做的那些课程设计、毕业设计,还是GitHub上能下载到的绝大多数项目,用同事的话来说就是:太干净了,一看就没有经历过产品经理的摧残。

实际上,我们进公司后接触到的代码,绝大部分是有一定历史的:经历过了N个人的转手,并且在期间经历过了多次的功能迭代更新,新代码与旧代码杂糅在一起,光看目录就头疼得不行。

我接触到的这个项目就是类似的情况,并且没有项目有关的文档能给我看,有部分代码还没有注释,对于一个完全没有过接手别人代码经验,也对这个项目完全不了解的实习生来说,实在是太不友好了。

好消息是公司的人对我都很好,也给了我很多的时间去学习,积累经验。经过这段时间的摸索,感觉隐隐约约也能触碰到一点读项目代码的窍门了,在这里分享一下我的学习过程吧。

阅读项目代码的步骤

公司的代码不方便展示出来,我就以GitHub上面的这个开源项目newbee-mall为例子,记录一下我读项目代码的步骤。

把项目先运行起来

这可能是一句废话,但是却是阅读项目代码的起点。

配置项目的运行环境可能是一件比较繁琐的事情,多多少少会遇到一些问题。但是在解决这些问题的过程中,可以让你对项目的技术路线有个大致的了解,例如所使用的开发框架、使用的库、数据库服务器等信息。

项目跑起来之后,可以比较直观地看到项目的功能模块,让你对公司业务也有一个初步认识。尤其是对于没有文档而言的情况,体验这个运行起来的项目是了解业务的最好方法。

因为是下载下来的项目,还需要把数据库配置到本地,并且去配置文件中将数据库的信息改成自己本地的配置。如果是公司的项目,数据库应该是在公司服务器上面的,就不需要修改了。

1

因为是个SpringBoot的项目,修改完之后直接运行NewBeeMallApplication就能跑起来了,可以看到是一个商城。

2

大致操作了一下这个商城系统,和后台的管理系统,已经对这个系统的功能有大概了解了,接下来需要从大体上把握项目的后端情况。

了解项目后端架构情况

了解项目的架构情况,可以从两个角度出发。

观察项目的目录结构

读目录结构其实也属于读程序的一个部分,最起码能让你对代码的功能分类有个大概的了解。如果经验比较丰富,项目的目录结构也比较合理的话,其实看包名就能知道对应包的作用。但是如果是经验不太充足,或者是目录结构很混乱的情况,最好还是要花点时间记录一下。

这个项目代码量并不是特别多,也没有用到其他特别的框架,包名都是很常见的包名,因此见名知意,很快能知道每个包的作用,寻找代码文件的时候也方便得多。

3

观察数据库表状况

观察数据库表状况,就是去了解有哪些实体,实体与实体之间的关系如何,如果有余力的话,可以自己画画关系图。当然,公司的项目上有一百多张表,以我目前的能力来说,肯定是没有余力的,因此我选择了用工具来导出。

我常用的数据库管理软件是MySQL Workbench,它恰好提供了这项功能。

首先点击左侧这个像链接一样的图标,点击Models后面的箭头小标志,选择“Create EER Model from Database”

4

然后按提示输入链接密码,选择要创建的数据库,一路next下去就行了

5

当然,如果数据库表很多的话,还需要过滤一下,可以只选择核心的表,不然导入太多看着很麻烦。

6

可以看到,这个项目的表结构比较简单,也没有什么复杂的关系。再去看看表中的每个字段,数据库的情况差不多就知道了。

7

深入项目,阅读代码

到了这个阶段,可以根据自身的情况来选择读代码的方式。因为绝大多数项目都是对数据库进行增删改查的操作,只是越复杂的项目,操作也就越麻烦。因此可以先加深对数据库的熟悉程度,这样看到一个功能之后,就能想出来大概需要操作的是哪些数据,剩下的就只是仔细看看操作的逻辑而已。

然而对我来说,只看数据库太枯燥了,因此我的方法是从被调用的接口入手,先看控制器的逻辑,再看被调用方法的功能,然后看sql语句,最后跟着sql语句去看看是对哪些表进行的操作。

从被调用的接口入手

在项目跑起来之后,对所有能执行的操作执行一遍,依次查看是哪些接口被调用了,从接口出发,一直跟到数据库,这样就能对这个操作的执行逻辑有比较深入的了解。

那么如何判断是哪个接口被调用了呢?由于客户端有网页端和移动端之分,如果是网页端就比较方便一些,直接F12打开开发者工具,然后选择网络监视器,就可以看到浏览器与服务器的交互信息。点击“XHR”过滤掉前端的非ajax请求,剩下的每一条请求中,请求头(Header)里的Request URL就是前端调用后端的接口。

8

移动端则麻烦一些,需要安装专门的抓包软件,抓取移动端的HTTP数据包,也能得到这个URL,这里就不演示了。

理解整个操作的逻辑

得到接口名称之后,需要找到这个接口的代码。我使用的是IDEA,可以通过Ctrl+Shift+F打开全局搜索,将接口名复制过去,就能找到与它相关的代码了。IDEA里还有一个比较好用的插件,叫做RestfulToolKit,可以根据 URL 直接跳转到对应的方法定义(不过2020版本之后好像用不了了)。

9

找到该方法所在的控制器后,就可以开始读这个接口的代码了。读代码也需要抓住重点,不需要每一个调用的方法都跟进去仔细看。例如这个方法中,if语句内只是对参数进行一些判断,了解即可;第二个部分是对页面进行了一些限制,用于分页查询,了解即可;第三个部分才是真正去获取轮播图的信息,我们跟进到这个方法当中。

10

NewBeeMallCarouselService是一个接口,我们到它的实现类中去看代码的逻辑。从数据库中读取了两种数据:一是轮播图列表,二是轮播图的总数,然后加上一些页面配置的数据就直接返回了。那么具体数据是什么,从哪里来的数据呢?我们得到对应的CarouselMapper.xml中去查看对应的sql语句。

11

在CarouselMapper.xml中,Ctrl+F打开搜索框,把调用的方法名输入进去,找到对应的sql语句。可以看到这个sql是比较简单的,只是从tb_newbee_mall_carousel表中查询了几个字段,由于做的是逻辑删除,因此要还排除掉逻辑上已经被删除的数据,最后排序进行返回。

12

要是想知道每个字段的意思,直接去数据库里找tb_newbee_mall_carousel表即可。

13

通过这样一套顺序,我们已经了解了点击“轮播图配置”之后的操作逻辑,其实就是从数据库中读取到有关数据进行展示。同时,我们也知道了这个控制器是对轮播图进行操作,对tb_newbee_mall_carousel表的内容也有了初步了解。

这样多操作几次,很快就能将项目的功能模块理清楚。

给关键代码加上注释

我们总会遇到一些比较逻辑复杂,又没有注释,还必须要读懂的代码。这时候不能着急,要慢慢去理解,同时记得边读边加上注释,方便我们下次再看。

阅读项目代码的四大原则 跑不起来的代码不读,用不到的代码暂时不读

这里再次强调一下运行代码的重要性。跑都没跑起来的代码,跟死着没什么区别,没有读的必要性。

用不到的代码暂时不读的意思是,想要快速上手项目,肯定没办法一来就把所有的东西都搞懂(并且记住)。我们一个接口一接口去摸索的时候,肯定有一些类是暂时没碰到的。这些类就可以先不用管它,大概点进去看看有没有注释,如果能了解到这个类是干什么的最好,不能的话也不用强求。一个类中,也可能有暂时没用到的方法,有注释的话可以跟着注释看看方法的作用和逻辑,如果没有注释,粗读一下代码,了解方法的作用就好了。

当然,如果时间充裕,也可以稍微深入地去看,但千万别颠倒了主次,最应该深入了解的是项目中真正用到的代码,毕竟没用到的代码,你也不知道是不是已经废弃了,但是又不敢删除,只是空留在那╮(╯▽╰)╭。

随着你慢慢融入到这个项目中,那些原本空白的部分再理解起来就没有那么困难了,自然而然会被填补上。

以功能逻辑为主,不要死抓细节

快速上手的目标只有两个字:了解,而不是精通。因此不需要去研究每一行代码,思考之前这个人为啥这么写,别的写法行不行。我们只需要跟着他的想法,从Controller到sql去看代码的逻辑,如果代码中有使用了别的方法,大概看看这个方法是干嘛的,返回了什么数据,本方法拿来做什么即可,不需要再跟着别的方法再去串一条线看下去(除非必要);也千万不要直接想着怎么优化,这是等熟悉了项目之后才需要考虑的问题。

虚心请教,学会提问

如果说运气好,能有一位对项目很了解的老员工带着你,事无巨细地把项目讲给你听,那自然是再好不过了。然而事实上很难做到,老员工也有自己的工作要处理,即使负责人安排了老员工带着你,你不主动问,人家也没有义务主动来教你,因此说要学会提问。

首先要确定的是,提问很重要。有时候我们自己在那纠结了半小时的问题,可能问一下,几句话的事情就弄明白了。有时候业务上的需求很复杂,不了解业务很难理解代码的逻辑,这时候有人来讲解一下是很重要的。

其次是,提问是一门学问。虽然说提倡提问,但是也并不是说一有问题就问,逮到谁就问。有时候别人项目工作很多,正在忙的时候,你时不时找人家问问题打断人家思路显然不好。最好是不懂的先记录下来,然后找机会,比如吃饭午休的时候,再问问。当然,前提是和同事搞好关系,平时一起聊聊天吃个饭啥的,关系亲近了,人家也比较愿意带带你。

勤记笔记,多画图

接触到的公司项目太多太杂了,光靠脑子去记是很难全部记住的,有时候需要做做笔记。比如说给代码的实现逻辑写写注释,这样以后再来看的时候,还能看得懂。

对于整个系统而言,可以画一画系统的功能模块图,流程图等等;甚至可以先画图,再比照代码,看看自己理解的逻辑是否正确,这样整理成文档,有记不清的地方了还可以翻出来复习复习。

后记

这段时间接触到了不少新的东西,还在慢慢看慢慢学,希望有机会也能写一写相关教程。不过上班了之后变懒了许多,一下班就不想动弹了,愿我早日改正吧╮(╯▽╰)╭。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3