将模块模式用于大型项目

时间:2010-04-27 01:27:53

标签: javascript module-pattern

我对使用模块模式更好地组织我未来的项目感兴趣。不幸的是,只有一些简短的教程和模块模式的概念验证示例。

使用模块模式,我想将项目组织成这种结构:

project.arm.object.method();

“project”是我的全局项目名称,“arm”是项目的子部分或分支,“object”是单个对象,依此类推方法和属性。

但是,我不确定如何在“项目”下宣布和组织多个“武器”和“对象”。

var project = window.project || {};
project.arm = project.arm || {};

project.arm.object = (function() {

    var privateVar = "Private contents.";

    function privateMethod() {
        alert(privateVar);
    }

    return {
        method: privateMethod
    };

}());

在定义复杂的模块结构时是否有任何最佳实践或约定?我应该在最后一个下面声明一个新的手臂/物体吗?

3 个答案:

答案 0 :(得分:20)

这是对你所追求的事情的一个很好的描述; http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

答案 1 :(得分:3)

Dojo的dojo.declare非常适合这种事情,因为它

  

使用紧凑表示法创建一个构造函数,用于继承和原型扩展。

即使只是去除这种锅炉板也很方便:

var project = window.project || {};
project.arm = project.arm || {};

如果你只是想要这个功能,那么你可以使用dojo.setObject,但当然,写一些东西来做同样的事情是微不足道的。

dojo.setObject("project.arm.object" (function() {
    var privateVar = "Private contents.";

    function privateMethod() {
        alert(privateVar);
    }

    return {
        method: privateMethod
    };
}()));

我最近使用dojo.declare / dojo.setObject来处理大型JavaScript项目(86个文件,7K +行(不包括注释和空白行)),并且可以轻松地保持所有内容的组织和可管理性,特别是当你有dojo.requiredojo.provide等包含机制时。

答案 2 :(得分:2)

人们更喜欢这样做有很多细微差别,但是你所谓的模块模式(一个命名范围)的主要好处是你不会弄乱全局命名空间,这有助于保持事物如果你引入其他库等清理,并避免名称冲突。

如何组织名称和嵌套范围主要取决于个人偏好。