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

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

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

前言

来公司实习也一个多星期了,基本上啥事也没干,主要就是看公司项目的代码。坦白说,第一次接触到这种实际的项目中来,确实和平时所能接触到的项目代码很不一样。平时无论是自己做的那些课程设计、毕业设计,还是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去看代码的逻辑,如果代码中有使用了别的方法,大概看看这个方法是干嘛的,返回了什么数据,本方法拿来做什么即可,不需要再跟着别的方法再去串一条线看下去(除非必要);也千万不要直接想着怎么优化,这是等熟悉了项目之后才需要考虑的问题。

虚心请教,学会提问

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

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

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

勤记笔记,多画图

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

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

后记

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

你可能感兴趣的:(经验分享:如何快速上手公司的项目代码)