告别刀耕火种:浅谈VisMooc的前端工程化 | Chen Zhutian
0.交待背景
VisMooc是组里的一个大项目,主要是给在线教育网站的各种数据提供可视化的分析工具,可以算是一个webapp。最初由丛磊师兄带头创立并实现完成,从0.5版本发展到现在较为稳定的2.0版本,集合了屈老师以及很多师兄师姐的智慧和汗水,为组里赢得了无数的荣誉与名声,可以说是组里的王牌项目之一。
由于特殊的生长环境,VisMooc的各种功能基本都是由不同的师兄在一个又一个的deadline中赶出来的,然后每年再对整个系统重构一遍,把各种功能整合上去。在这种特殊的“国情”下,VisMooc的代码野蛮生长,项目的性能必然是没有经过优化的,鲁棒性也不高,很多功能都是hack出来的。但是其实性能不好、鲁棒性不高也没关系,毕竟目前只是个演示用的Demo项目,并发访问量、日访问量都不怎么高,各种可视化的技术和概念能展示就行。
但是VisMooc目前有一个无比巨大的坑,那就是代码毫无可维护性可言,灾难般的可维护性,许多部分相当混乱,开发目前的VisMooc,有种在茅房里吃佳肴的感觉,怎么都美味不起来。老实说,作为一个码农如果有一天你发现自己的开发效率奇低无比,你就要想想是不是自己的工作环境不够整洁,是不是自己的刀没有磨利。
VisMooc的不可维护性集中体现在以下几点:
- 代码难以维护
- 由于缺少统一的编码规范,并且不同的功能由不同的师兄开发,导致项目各部分的代码高度不统一,每个部分的代码都有不同的风格。
- 很多代码的变量名都是随便起的,比如
var a,b,kkk;,基本不能做到变量名自解释,注释比较稀少,在通读代码之前变量含义和函数功能主要靠猜。- 此外,模块化和组件化开发的特性较弱,目录结构和依赖关系较乱,一个组件的CSS文件可能在别的组件的目录下;有时候忽然在代码中看见了某个未曾谋面的对象,但是你却不知道它来自哪个组件。
- 历史负担较重,许多陈年老码,有些早已不用的,有些依然在用,混在一起。
- 项目难以维护
- 缺少项目管理工具,小作坊式编程。许多管理工具只是装上意思意思,但是并没有使用,比如Bitbucket的团队协作管理等。
- 有用npm和bower来管理第三方依赖包,但是
npm install和bower install完了之后项目基本是运行不了的,经常是缺了某个依赖包,但是这个包不在dependence list里,要人肉去读码补全。- 有用Git来做版本控制,但是.gitignore是随便写的,比如会把自己写的代码给ignore掉囧rz,所以在别的机子上clone项目的时候,往往会报错显示某个变量no reference,debug一通最后发现原来是缺了代码文件。
