如何接手一个新项目

项目好与不好,它就在那里;架构优雅或者丑陋,它就在那里;注释有或者没有,它还在那里;文档乱或者不乱,它始终都在那里。不论它是什么样子的,线上就那样跑着。

一般来讲,项目分为两种:

1、为业务服务的项目,比如公司内部项目、电商项目、各种 app 项目;

2、为技术服务的项目,比如开源中间件项目(dubbo、spring cloud、各种数据库中间件、各种缓存方案等);

首先说第二种项目,它专注于提供某一个或几个特定的功能。相对来说,这种项目技术实现上可能需要对这一领域有比较深的要求,但职责单一,目标明确。而且这种项目都是面向开发人员的,所以设计文档、接口文档、使用文档都会比较齐全。而且这种项目一般都会承担比较核心、比较重要的功能,并且还会在公司内部开放,甚至直接开源到社区。所以要经得起考验,代码都会写的比较规整。

开放出去,如果架构和代码不规整,就不会有人在 github 上 star,也不会有多少人使用。没人用事小,被人骂事大,让团队和公司丢脸更了不得了。所以这种项目比较容易接手,因为在文档和代码都比较规整的情况下,只需要在技术上下功夫就可以了。

本来项目应该有齐备的文档的,而现实中的好多项目往往不是这样的。由于各种各样的原因,比如框架比较老,人员变动,业务变动等,可能造成项目结构变的比较混乱。那么当我们应该如何快速的接手这样一个项目呢。

1、首先需要了解项目的的表现形式,什么是表现形式呢,就是说这个项目是提供 web 端服务,还是提供 App 端服务,还是其他形式的服务,又或者是混合了多种形式。我们比较容易理解具体的东西,而对于抽象的事物理解起来有一定的难度。所以看到项目最终的表现形式,可以对应到我们的项目结构中,这样一来,对于理解项目就比较容易了。

2、了解项目的部署架构。部署架构包括从客户端一直到数据访问层。这其中包括服务器系统版本,后端服务器软件类型(tomcat 、jetty 等),负载均衡配置,配置了多少台,用的是 nginx 还是 HA ,有或者是其他的。前后端交互方式,缓存是用到什么方案,是 redis 还是其他的,单机主备还是集群方案。数据库用的什么,有没有集群,有没有异地。数据库中间件用的什么框架等等。这个时候,最好有部署架构图拿来看一眼,如果是比较复杂的项目,肯定开发和运维会有部署文档的。如果没有完备的文档,建议要了解清楚之后,自己手动画一下部署架构图。

3、了解项目的代码架构。其中包括项目使用的基础框架,比如是 Spring mvc ,还是 Spring boot ,又或者是其他的框架,有没有用到 Netty 等其他的比较大的框架。有没有用到分布式 SOA 或者是否使用了微服务。用到分布式方案是 dubbo 还是 spring boot ,其中重点关注这些框架所用的版本,有些框架的版本可能比较老旧。

4、了解项目功能模块。到这里就和业务有关了,功能模块的划分一般和业务有关,比如注册登录模块、用户管理模块、订单管理模块、财务相关的服务模块等等。以及模块之间的依赖关系,是不是存在项目引用,是不是存在 RPC 调用或 http 服务调用关系等。这个时候,最好有完整的模块或服务依赖结构图,如果没有,最好在了解了项目结构之后,自己手动画一张。

5、最后,就是要理解具体的业务了,然后根据业务查看、调式对应的代码以及数据结构。

总体上要遵循从整体到细节,从高纬到低维的一个过程。如果能做好以下几点就最好了:

1、如果项目不是很复杂,最好可以有测试环境或者本地环境搭建起完整的项目架构。

2、如果项目很复杂,至少要保证自己负责的部分可以通过一些方法能在本地搭起来。

3、如果要在项目上做功能扩展,要遵循团队或项目的规范,不要独树一帜,这样会给后期维护带来麻烦。

4、修改功能之后,要维护好对应的文档。

想到哪儿写到哪儿,好多东西没写到位。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏App渠道推广

简单实用:十分钟解决多渠道打包难题

多渠道打包一般是由人工进行的,意义在于:App上架应用市场后用来统计不同渠道的下载量、来源等信息。

2141
来自专栏跟着阿笨一起玩NET

WCF技术我们应该如何以正确的方式去学习掌握

客户端调用WCF服务可以通过添加服务引用的方式添加,这种方式使用起来比较简单,适合小项目使用。服务端与服务端的耦合较深,而且添加服务引用的方式生成一大堆臃肿的文...

812
来自专栏帅小子的日常

Dubbo介绍和服务架构分析

4308
来自专栏嵌入式程序猿

你应该学会的串口仿真

新年伊始,万象更新,在新的一年里,有没有给自己的嵌入式开发之路做一个很好的规划呢?开工第一天,就让自己动手学起来吧,小猿带你一步一步成长为一名合格的嵌入式开发人...

3697
来自专栏java一日一条

高并发系统的设计及秒杀实践

一个大型网站应用一般都是从最初小规模网站甚至是单机应用发展而来的,为了让系统能够支持足够大的业务量,从前端到后端也采用了各种各样技术,前端静态资源压缩整合、使用...

2913
来自专栏恰同学骚年

操作系统核心原理-7.设备管理:I/O原理

  前面阐述了操作系统具有进程管理、内存管理、外存管理三大核心功能,但是计算机归根是为人类服务的,这就要求计算机必须提供某种机制使得人们可以向计算机发出命令或操...

925
来自专栏服务端技术杂谈

重构系统的套路-提高并发能力

比如我们在某段业务逻辑中加了一个同步写kafka的操作,tp99瞬间多了30毫秒,这样在整个监控曲线看起来非常扎眼,于是我们需要将这个同步改成异步。

902
来自专栏架构师之旅

Mysql在大型网站的应用架构演变

写在最前: 本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变 可扩展性 架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展...

1898
来自专栏java工会

Js埋点与流量分析

页面埋点的作用,其实就是用于流量分析。而流量的意思,包含了很多:页面浏览数(PV)、独立访问者数量(UV)、IP、页面停留时间、页面操作时间、页面访问次数、按钮...

3041
来自专栏技术小黑屋

最小特权原则

之前的项目中的一些事情的做法违背了最小特权原则(亦为最小权限原则),这里记录以下什么是该原则。

2651

扫码关注云+社区

领取腾讯云代金券