抱模块化的JavaScript

咱俩再度同破受电脑的名词,概念笼罩。

 

backbone、emberjs、spinejs、batmanjs 等MVC框架侵袭而来。

 

CommonJS、AMD、NodeJS、RequireJS、SeaJS、curljs
等模块化的JavaScript概念以及库扑面而来。

 

模块化JavaScript的概念尤为突出,似乎有等到超07年Ajax风潮之趋势。

 

一、写函数(过程式)

2005年先,JavaScript没人重,只作为表单验证等为数不多行使。那时一个网页上勾画不了几实施JS代码,1000行算很复杂了。这时组织代码的措施是过程式,几十执之代码甚至连一个函数都毫无写。稍多之待取抽象出一个函数,更扑朔迷离一些虽需要再多函数,函数间互动调用。

 

 

其次、写类(面向对象)

2006年,Ajax包天下。JavaScript给注重了,越来越多的后端逻辑放到了前者。网页中的JS代码量急剧增加。这时写函数方式组织大量代码显得心有余而力不足。有时调试一个略作用,从一个函数可能会见过到第N单函数去。这时写类的主意出现了,Prototype 率先流行起来来。用她组织代码,写起的还是一个个类,每个接近都是Class.create创建的。又有YUI、Ext齐重级框架。虽然它们的写类方式各不同,但其的统筹思路也还是要满足大量JavaScript代码的支出。

 

三、写模块(现在,未来?)

2009年,Nodejs诞生!这个服务器端的JavaScript采用模块化的写法很快征服了浏览器端的JSer。牛人们纷纷效法,各种写模块的正统也是层出不穷。CommonJS想统一前后端的写法,AMD则觉得自己是符合浏览器端的。好吧,无论写模块的风骨是啥样,写模块化的JavaScript却早就初步流行了。准备好了邪?(呃具煽动性)

 

呼,模块化的JavaScript是吗?
这是咱们阐明了同时一个银弹啊?无论是什么,就当上吧。至于适不适合项目面临运用,各自斟酌。

 

描绘及马上为从未说啊是“模块”。其实在处理器领域,模块化的概念给尊重了近四十年。软件总体结构体现模块化思想,即把软件划分也局部独门命名的部件,每个部件称为一个模块,当把持有模块组装在联合的时刻,便只是抱问题之一个除掉。

 

模块化以分治法否依据,但是否代表我们拿软件无界定的细分下去。事实上当分割了密切,模块总数增加,每个模块的本金实在减少了,但模块接口所急需代价随之大增。要保模块的成立划分则须了解信息隐藏,内聚度及耦合度。

 

消息隐藏

模块应设计之假设该所蕴涵的音信(过程及数目)对于那些无需利用它的模块不可见。每个模块只就一个单独的意义,然后提供该意义的接口。模块间通过接口访问。JavaScript中好就此函数去潜伏,封装,而后返回接口对象。如下是一个提供事件管理之模块event。

event = function() {
    // do more
    return {
        bind: function() {},
        unbind: function() {},
        trigger: function() {}
    };
}();

函数内为实现想只要之接口bind、unbind、trigger可能需要写过多众代码,但这些代码(过程及数据)对于其他模块来说不要公开,外部只要能看接口bind,unbind,trigger即可。

 

消息隐藏对模块设计好处十分显,它不仅仅支持模块的互动开发,而且还可减测试或深维护工作量。如后如果修改代码,模块的隐身部分可随心所欲改变,前提是接口不移。如事件模块开始落实时为配合旧本子IE及业内浏览器,写了多IE
Special代码,有平等上旧本子IE消失了(猴年马月),只待从容删去即可。

 

内聚度

内聚是缘于结构化设计的一个定义,简单说内聚测量了么模块内相继要素的关联程度。最不愿意出现的内聚就是偶然性内聚,即将完全无关之纸上谈兵塞进同一个模块或近似吃。最希望出现的内聚是功能性内聚,即一个模块或接近的各国因素并工作,提供某种清晰界定的所作所为。

内聚度指模块内部贯彻,它是信息隐藏和局部化概念的当扩展,它表明在一个模块内部各级分相互结合的严谨程度。好处吗要命明确,当把有关的任务分组后错过读就爱多了。设计时应有尽可能的加强模块内聚度,从而得到比较高之模块独立性。

 

耦合度

耦合也是出自结构化设计,Stevens、Myers和Constantine将耦合定义也「一个模块和另外一个模块之间建立由底干强度的测。强耦合使系统易得复杂,因为要是模块和其它模块高度相连,它便难独自的受了解、变化和更正」

外聚度是据特定模块内部贯彻之平等种植量,耦合度则是依赖模块之间的涉及程度的心气。耦合度取决于模块之间接口的纷繁,进入或调用模块的职务等。与内聚度相反,在计划时应尽量追求松散耦合的网。

 

相关:

结构化编程

Loose Coupling, High
Cohesion

JavaScript中模块“写法”

相关文章