昨天在公司内部做了一个小小的技术分享,就 js 应用开发方面跟大家谈了一点自己的心得,最近因为工作关系花在这上面的时间较多也颇有些收获,写在这里备忘。

 

做了三个小demo,本来想做一个类似Gmail的界面出来后来突然发现机器上没有Office,就干脆做了一个类PPT演示的小玩意。

 

基于js的应用开发总结起来主要有如下几点:

 

封装粒度

常用功能封装为可重复使用的组件,需要合理选择组件封装粒度,粒度过大不便于复用,粒度过小则得不偿失。

 

代码结构规划
吸收传统软件开发的思想将代码按功能划分为不同的区块:初始化,事件绑定,事件逻辑处理,外部Callback调用

 

Js的面向对象

简单起见可以使用构造函数(其实就是普通的Function)+ prototype定义,虽然看起来不是很优雅不过却是比较直接的解决办法。演示代码中使用了Mootools类库,相比jQuery来说,这个类库的面向对象特性使用起来个人感觉更好一些,当然也可以使用它自带的Class申明方式来编写你自己的Class:

Meta.Controls.Pager  
   = 
     
   new 
    Class({
 Implements: [Events, Options],
 options: {
 pageIndex : 
   1 
   ,  
   // 
    当前页码, 从1开始 
   
 
    size :  
   10 
   ,  
   // 
    每页显示记录数 
   
 
    maxButtons :  
   5 
   , 
   // 
    显示的分页按钮数量 
   
 
    showPageSize: 
   true 
   ,  
   // 
    显示分页大小选项. 
   
 
    sizeArray:[ 
   10 
   ,  
   25 
   ]
 },
 initialize:  
   function 
    (A) {
 
   this 
   .setOptions(A);
 
   this 
   .pageIndex  
   = 
     
   this 
   .options.pageIndex;
 
   this 
   .size  
   = 
     
   this 
   .options.size;
 
   this 
   .maxButtons  
   = 
     
   this 
   .options.maxButtons;
 
   this 
   .itemCount  
   = 
     
   0 
   ;
 
   this 
   .pageCount  
   = 
   0 
    ;
 },
 ......
}

这样的方式也是不错的选择,代码逻辑结构清晰一目了然。 

单元测试

通常认为浏览器上的js 应用要做单元测试不好做,原因主要是跟DOM关系太紧密,但也不是完全没有办法,比如Google的Closure就做得不错,使用Mock的对象来模拟Dom元素并解耦代码逻辑与Dom对象操作。