本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

wzatv:【组图】【第715期】大型前端项目的架构(3)

时间:2016-09-28 00:41来源:118图库 作者:j2开奖直播 点击:
Module pattern 是一种常用的设计模式,它用closures来封装public/private的变量和方法,所有复杂的业务逻辑都留在closure空间里,只暴露public API到全局,并且避免

  Module pattern 是一种常用的设计模式,它用closures来封装public/private的变量和方法,所有复杂的业务逻辑都留在closure空间里,只暴露public API到全局,并且避免命名空间混乱。

  不过在Java里,并没有任何保留字可以将变量设置成私有的,我们只是利用closure来模拟privacy的概念,让外界无法访问到它,所有私有的变量和方法只能在closure空间内被访问,而被函数返回的变量和方法才能被外部访问。

  下面有个购物车的例子,这个模块在全局里叫basketModule,模块里的basket array是私有的,只能通过public api访问到它,例如:addItem(),getItem()。

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  这个模块返回一个组件,并且赋值给basketModule,所以可以想下面访问它:

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  从历史回顾下,module pattern原本是在2003年由几个人发展出来的,其中包括Richard Cornford,之後再由 Douglas Crockford 和 Eric Miraglia 发扬光大。

  我们来看看 module pattern 在特定的框架下是如何应用的。

  Dojo

  Dojo通过dojo.declare提供一种近似类(class)的概念来达到module pattern的,例如我们想在命名空间store下新建一个模块basket:

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  YUI

  这个例子是用来YUI来实现module pattern。

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  jQuery

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  相关资料

Rebecca Murphey — Structuring Java Applications

Peter Michaux — MVC Architecture For Java Applications

StackOverflow — A discussion on modern MVC frameworks

Doug Neiner — Stateful Plugins and the Widget Factory

Object Literan Notation

  在对象字面量里,将一连串用逗号隔开的name/value组合放到大括号里({}),name 和 value 又以分号隔开,这样就完成了组件的封装,你可以看看下方的案例。

  如果模块沒有任何的私有属性或方法,很合适使用对象字面量。

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  相关资料

Rebecca Murphey — Using Objects To Organize Your Code

Stoyan Stefanov — 3 Ways To Define A Java Class

Ben Alman — Clarifications On Object Literals (There’s no such thing as a JSON Object)

John Resig — Simple Java Inheritance

CommonJS Modules

  在过去的一两年,我们常常听到 CommonJS,它主要是一个工作团队设计,制作原型和标准化的Java api。目前他们提出CommonJS AMD用来规范模块的设计,这个设计很简洁,我认为它会成为ES6模块组件标准的基础。

  一个CommonJS模块就是一个可重用的Java代码,它只是暴露组件给外部访问。有很多很好的教程来教你如何实现CommonJS模块,简单来说模块基本上包含两个东西:

一个exports对象,其附加暴露对象

一个require函数,其用来加载其他模块

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  有一些不错的模块加载工具,其中我个人推荐RequireJS,而且这有一篇相关的好文。RequireJS让我们可以很简单的创建模块,并且容易使用非同步方式来加载模块。

  因为上面的例子无法在浏览器中运行,为了能让它也可以在浏览器中执行,我们再举一个简单的例子,我们要把图片转码成ASCII。

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  这段代码无法创建一个模块scope,而且require会是undefined,exports对象必须创建,但如果使用XHR加载然后eval()它,就没有问题了。RequireJS都帮我们做好了,只要这样做:

  

wzatv:【j2开奖】【第715期】大型前端项目的架构

  相关资料

The CommonJS Module Specifications

Alex Young — Demystifying CommonJS Modules

Notes on CommonJS modules with RequireJS

The Facade Pattern

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容