今天被朋友问到一个问题:如何团队合作开发一个复杂的web app?
前端开发在团队合作时,有两种情况:一种是web page模式,一个人开发一个网页,网页中的应用都很零碎,不会特别复杂,代码规模较小。这种情况,多人团队合作其实需要做好的事只有两个,1)注意用匿名函数将代码包进来,预防将来有新模块加入时彼此产生影响,2)抽取共公组件,一些全站重用的模块,不要重复开发,这点只要做好js的分层就好了。关于web page的多人团队合作,在我的书《编写高质量代码——web前端开发修炼之道》中已经讲过了。
另一种情况是web app模式,多人同时开发一个较大型的页面,比如google地图、webqq、新浪聊天室这样的web app,代码规模较大,和web page有很明显的区别。这种情况下,多人合作有更加深入的要求!
这种情况我是这么处理的:前期做好架构设计,全团队在一起开会商量,这个应用应该分成哪几个类,用UML图画好类结构和继承关系、组合关系,UML图不用太细,只用画出公共接口就行,因为公共接口是模块与模块对接的地方,也是团队合作的重点。画出UML图之后,就好办了,各个团队成员分别挑一些模块去各自实现,把接口实现好。团队中大部分人是开发model模块的,等着被control调用,而有一个负责开发control模块,把所有人的工作联接起来。
模块按单独文件开发,一个模块里只包括一个公有的类,对应一个js文件。模块按照一个基本范式进行定义,可以按commonjs的范式,也可以干脆就是一个window.xxx的全局变量。模块是否加载,由control决定,动态加载。可以使用requirejs这样的模块管理器,也可以自己开发一个,如果不考虑模块依赖关系处理的话,开发起来还是很简单的。我个人习惯使用YUI3的模块化范式和模块加载器。
之前新浪微博的web im是我负责团队合作工作的,就是按照最简单的方法——一个模块对应一个js文件,模块内的公有类,通过window.xxx显露出来,然后由control把它们全部动态加载起来。这样的方式在实战中效果很理想,团队在配合上非常顺畅。加上应用scrum来进行软件项目管理,每天早上的站立会议可以帮助团队加强沟通,迅速发现问题,整个开发过程非常透明,虽然每个人只开发一个模块,但其实对别人的工作内容非常清楚,每个人都有清晰的大局观。