一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题。
合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加到哪里。总的来讲,我认为好的文件结构应该满足以下3条标准:
- 每一个文件夹下面不应该有太多的文件,通常不超过30个;
- 每一个文件里面的代码不应该超过300行,不管是HTML、CSS还是JS文件;
- 所有的文件应该有层次感,属于同一层的文件应该放到一起。
前面2条标准看上去非常简单,实际情况呢?确实很简单,并且做起来也不难。但事实是很少有人这样去要求他们的程序员,因为他们觉得这算不得什么标准,只是个人喜好而已。然而从我带的多个项目经验来看,这2个简简单单的标准起到了非常大的作用,也正是这2个简单的标准多年来一直鞭策着我,不敢越雷池一步,从而想方设法不断去完善架构,不断去让代码变得易读。如果你已经花了不少时间读到了这里,那我真心希望你可以将这2条标准纳入囊中。顺便,我再赠送你2条关于编码的标准吧,希望能对你有用:
- 每一个方法不超过30行;
- 尽量一行注释都不要写。
回到前面提到的文件结构的3条标准,我已经说了2条简单而重要的,下面我将针对PhoneGap项目如何组织合理的文件结构进行详细的阐述,也就是第3条标准:分层。
5.1 分层
我们都知道PhoneGap程序使用HTML、CSS和JS来编程,那么文件首先按照这么3层来分的话就会很清晰了。每一层下面都可以用子文件夹来划分模块或者子模块,这样就可以保证每个文件夹下面不会有太多的文件。
通常情况下,一个项目的HTML和CSS文件相对较少,因此文件组织很容易。这里我只重点介绍JS部分的分层。
这里我也是参考我们的ASP.NET MVC项目架构对JS代码进行分层。我在CodePlex上面放了一个ASP.NET MVC全方位的架构解决方案,你有兴趣的话可以去看看,地址:http://mvcsolution.codeplex.com.
我先贴一个我们项目的文件分层情况:
跟这个项目业务相关的JS都放在了/js/at文件夹下面,我所说的分层也主要是这部分代码的分层。
1. Infrastructure
这一层主要放对系统或者第三方库的扩展,以及一些通用的方法,如对Array、Date的扩展,如对jquery ajax的再一次封装。所有层都可以访问。
2. Database
定义本地数据库以及表。通常下面有一个DbContext文件和多个实体类的定义。
3. Services
这一层的代码主要是访问本地数据库,供pages层调用。因此,pages层对数据库的访问都要经过service层,pages层不能直接操作数据库。
4. Apis
很多PhoneGap程序都需要跟远程服务器进行数据交换,这一层的代码就是做这件事的。通常,这一层的代码有大量的ajax调用。
5. Pages
操作HTML呈现给最终用户。
5.2 文件合并
还记得我们在第二章中阐述的index.html吗? 我们在第二章中说了,index.html相当于应用程序的壳, 在应用程序启动的时候,完成了应用程序的初始化,其中就包含了javascript的初始化。
在index.html中,项目业务相关的JS被合并到了一个文件里面,这里就用到了一个文件合并工具grunt。grunt的安装和使用我会在第九章开发工具中详细阐述。当所有的JS都已经初始化完成,那么我们的程序员在使用每一个JS类的时候,就不需要等待JS文件的加载了。
对JS文件的合并和初始化,其实可以理解成C#程序的编译。当我们编译C#程序时,我们写的所有的代码都被编译到了DLL中。这样一来,调用者就可以很方便的使用我们的代码了。因此对于PhoneGap程序来讲,JS文件的合并非常重要,能够极大的让代码变得更干净。