今天跟大家唠唠我这几天在搞的“妖精狩猎者”项目,一开始接手的时候,我是有点懵的。这名字听起来就挺二次元的,跟我平时搞的那些企业级应用完全不是一个画风。
我拿到的是一个半成品,前端用的是React,后端是*,数据库用的是MongoDB。这套技术栈我倒是不陌生,但是代码质量嘛只能说是一言难尽。各种魔法数字,命名不规范,注释缺失,看得我头皮发麻。
第一件事,就是把项目跑起来。我先是把代码clone下来,然后装依赖,`npm install`。结果,直接报错,各种依赖版本冲突。折腾了半天,发现是*版本太高了,降到v16才搞定。
启动MongoDB。我之前用Docker跑过MongoDB,这回也一样,直接`docker-compose up -d`。数据库启动成功,但是*连不上,报错说“connection refused”。仔细一看,原来是*里的端口映射有问题,改了一下,总算是连上了。
后端跑起来之后,前端又出幺蛾子。`npm start`之后,页面一片空白,控制台报了一堆错。看了一下代码,发现是API地址写错了,改成本地的地址,总算是能正常显示了。
能跑起来只是第一步,接下来就是理解代码逻辑。我花了整整一天的时间,把代码从头到尾看了一遍,理清了各个模块之间的关系。这个项目主要就是实现一个简单的“妖精”管理系统,可以添加、删除、修改、查询妖精的信息。
然后,我就开始着手重构代码。是把那些魔法数字全部替换成常量,提高代码的可读性。然后是统一命名规范,比如所有变量都用驼峰命名法,所有函数都用动词开头。接着是添加注释,解释一些关键的代码逻辑。
重构的过程中,我发现后端接口的性能很差,查询妖精列表的时候,需要花费很长时间。我分析了一下,发现是MongoDB的查询语句没有使用索引。于是我在妖精的名字字段上创建了一个索引,查询速度立马提升了好几个数量级。
除了性能问题,我还发现前端的代码有很多重复的地方。比如,添加和修改妖精的表单,有很多相同的代码。于是我把这些相同的代码提取成一个公共组件,减少了代码的冗余。
我还添加了一些单元测试,保证代码的质量。我用的是Jest和Enzyme,这两个测试框架我都比较熟悉。测试覆盖率虽然不高,但是也覆盖了核心的业务逻辑。
经过几天的努力,这个“妖精狩猎者”项目总算是焕然一新。代码质量提高了,性能也提升了,可维护性也增强了。虽然这只是一个小项目,但是也让我学到了很多东西。比如,如何快速上手一个陌生的项目,如何重构代码,如何优化性能,如何编写单元测试。
这回的实践经历还是挺有意思的。虽然过程很痛苦,但是结果是美好的。以后有机会,我还会继续分享我的实践记录。