大型JavaScript应用程序架构模式(3)

来源:未知 责任编辑:责任编辑 发表时间:2013-11-15 19:50 点击:


很多有经验的JavaScript开发者给出了一些关键的notes:


JavaScriptMVC的作者Justin Meyer说

构建大型程序最大的秘密就是从来不构建大型程序,而是将程序分解成各个小的模块去做,让每个小模块都可测试,可size化,然后集成到程序里。

High-performance JavaScript websites作者Nicholas,Zakas
"The key is to acknowledge from the start that you have no idea how this will grow. When you accept that you don't know everything, you begin to design the system defensively. You identify the key areas that may change, which often is very easy when you put a little bit of time into it. For instance, you should expect that any part of the app that communicates with another system will likely change, so you need to abstract that away." -

一大堆文字问题,太麻烦了,总结一句就是,一切皆可变,所以要抽象。

jQuery Fundamentals作者Rebecca Murphey
各个模块之间联系的越密切,重用性越小,改变起来困难越大。

以上这些重要观点,是构建架构的核心要素,我们需要时刻铭记。
 

头脑风暴

我们来头脑风暴一下,我们需要一个松耦合的架构,各模块之间没有依赖,各个模块和程序进行通信,然后中间层接管和处理反馈相应的消息。

例如,我们如果有一个JavaScript构建在线面包店程序,一个模块发出了一个信息可能是“有42个圆面包需要派件”。我们使用不同的layer层来处理模块发来的消息,做到如下:

  1. 模块不直接访问程序核心
  2. 模块不直接调用或影响其它的模块

这将防止我们因为某个模块出错,而导致所有的模块出错。

另外一个问题是安全,真实的情况是,大多数人都不认为内部安全是个问题,我们自己心里说,程序是我自己构建的,我知道哪些是公开的那些私有的,安全没问题,但你有没有办法去定义哪个模块才能权限访问程序核心?例如,有一个chat聊天模块,我不想让他调用admin模块,或者不想让它调用有DB写权限的模块,因为这之间存在很脆弱,很容易导致XSS攻击。每个模块不应该能做所有的事情,但是当前大多数架构里的JavaScript代码都有这种的问题。提供一个中间层来控制,哪个模块可以访问那个授权的部分,也就是说,该模块最多只能做到我们所授权的那部分。
 

建议的架构

我们本文的重点来了,这次我们提议的架构使用了我们都很熟知的设计模式:module, facade和mediator。

和传统的模型不一样的是,为了解耦各个模块,我们只让模块发布一些event事件,mediator模式可以负责从这些模块上订阅消息message,然后控制通知的response,facade模式用户限制各模块的权限。

以下是我们要注意讲解的部分:
    1 设计模式
        1.1 模块论
            1.1.1 综述
            1.1.2 Module模式
            1.1.3 对象自面量
            1.1.4 CommonJS模块
        1.2 Facade模式

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 用js检测两个线段是否相交
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 我是如何去了解jquery的(六),案例之幻灯片轮换
  • Jquery封装幻灯片效果
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1