项目:参与开发银行双录(录音录像)系统
-
项目概述
项目现被用于甘肃某地区(市)银行内部,属于一个管理范畴的项目。主要功能比如根据账号权限查看某分行下所有客户信息,编辑客户信息等。该项目一共有6人,前端1人,后端1人,桌面端1人,项目负责人1人,银行负责人1人,测试1人,我在其中负责 golang 服务器端。
-
项目感受
-
我在这个项目之前的所有项目,从前端到后端,从数据库到服务器,这些工作都是我一个人的事情,想怎么干就怎么干。而此次项目涉及多人协作,合作开发,每个人划分不同的模块。而从单人开发到合作开发的过程中,我产生了一些新的想法。
-
首先是前后端分离。我之前认为这样开发可以提升工作效率,对代码起到高内聚,低耦合的作用。的确也是如此,但对此如果没有深入性的认识,比如事先准备工作不充分,前后端并行开发没有准备接口文档,规范约束,或者是对技术理解不透彻,反而可能会对项目起到副作用。
-
技术选用需要进过深思熟虑,选择合适的技术是很有必要的。此次项目前端是 vue 后端是 golang,数据库 mysql。由于这是一个二次开发的项目,golang 在原有的代码之上进行开发,而前端原本是 ext 写的,现在要重构前端代码,肯定不能再使用这种古老的技术,因此这里使用响应式框架vue。对于后端技术选用,我一开始有这样一个疑问,为什么当时不用 java 而用 golang 呢?目前我认为当时的团队是这样思考的:java web虽然在后端处于霸主的地位,直至发展到今天。虽说目前已有 springboot,提出了"约定大于配置"这样的口号,各种依赖、配置不需要手动完成了。但它仍没能逃离 spring 这个重量级框架的约束。对此而言,golang 反而是一个不错的选择,因为它语法简单,对 web 有很好的支持,把它打包成二进制文件即可正常工作。因此对于一些小项目, golang 反而会降低成本,成为一个不错的选择。
-
对现下较为流行的一些辅助工具的审视。现在有很多能提升工作效率的”神器“,例如 git,docker,swagger 等。我曾试图把这些工具带入到这个项目之中,可最后都失败了。我一开始的任务是对已有的 golang 代码写接口文档。我使用 swagger这个工具,用了1.2天之后我发现,这个工具工作效率低,往往1天只能写5.6个接口文档,随后我就放弃使用它了。
-
-
此次项目总体来说没有复杂的技术点。唯一留下的仅仅是银行数十年的业务数据了,但就是这些数据库中的数据,却给了我很多不一样的体会。比如此次在某个业务场景里,有这样一个需求: 需要从多个几千万条的表中,根据若干条件找出符合要求的数据。这个需求并不复杂,只需要写一条 sql语句就能搞定。但我一开始并没有意识到这一点,我试图把该表的所有数据取出来拿到 golang 里,根据业务规则进行比较。这样做的后果直接导致查询一个数据需要数十分钟乃至数小时。好在问题不大,意识到问题所在我立马就解决了。由此,我也有一些体会。
- 透彻理解技术原理,优化其性能。例如这个例子所述的那样,尽管我明白了怎么解决这样的问题,但还是停留在实现它。此处一个 sql 语句可以把一个以小时计的查询压缩至以秒计算,我很好奇这是怎么做到的。接下来我将透过表面内容,深入学习一下数据库相关原理。
- **对新技术的入门和深入学习。**在这个项目进行到尾声的时候,我学习了一门慕课网的免费课程,这门课通过一个完整的项目开发,构建,上线,监控和简单运维过程,讲述了网站上云和DevOps的基础理念。如果我早一点学习这门课的话,可能会在此次工作中节省很多力气。为什么这么说呢,因为前端重构代码,他要 mock 数据,而前后端并行开发,我必须要确保处于线上的项目没有 bug,他才能正常工作。而我在发布新版本到服务器的时候,不下百次的使用 scp、ssh 指令,这对我产生了巨大的影响。而如果当时我知道DevOps,我从项目开始到最后,不夸张的讲1次 scp、ssh都不用。
-