GAS中图书馆的设计模式?

时间:2012-11-27 01:12:31

标签: google-apps-script

我一直在努力找出一段时间来编写GAS库的最佳方法,但我有时间计算它。我读了Douglas Crockford的 - Javascript:好的部分,我正在尝试在GAS中实现这些课程。每个导入的库都会向您的项目(ScriptModule类型)添加全局变量,因此the modular design pattern似乎是一个很好的起点。借用我链接到这种模式的文章可能如下所示:

var MODULE = (function () {
    var my = {},
        privateVariable = 1;

    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;
    my.moduleMethod = function () {
        // ...
    };

    return my;
}());

然后可以像这样调用此模块:

var module = LibName.MODULE;
var property = module.moduleProperty; // 1
var method = module.moduleMethod; // ...

从我收集的内容来看,最好尽量减少全局变量,因此一般建议似乎是将所有内容保存在一个全局变量中。因此,命名约定应如下所示:LibName.PROJECT_NAME,其中项目名称是您的单个全局变量的名称,该变量包含一个包含其他所有内容的模块。

我的目标是设计安全,无冲突的库。我是否正确使用这种设计模式?有没有人为GAS库开发了自己强大的设计模式呢?

1 个答案:

答案 0 :(得分:2)

当您在GAS中将脚本导入为库时,已经为其创建了一个新的“命名空间”,因此您无需自己创建另一个“命名空间”。你必须“尊重”它,就像你一样:

//there's no purpose for this
var module = LibName.MODULE;
var method = module.method;

//comparing if you write code directly on the library
var method1 = LibName.method1;

GAS不是客户端javascript,您学到的大多数内容并不真正适用于Apps脚本,例如没有DOM,没有命名空间冲突,没有浏览器兼容性问题等等。

顺便说一句,我认为这个对象嵌套结构甚至不适用于Apps脚本库。