Использование шаблона модуля для больших проектов - PullRequest
18 голосов
/ 27 апреля 2010

Меня интересует использование шаблона модуля для лучшей организации моих будущих проектов. К сожалению, есть только несколько кратких руководств и примеров концепции модуля.

Используя шаблон модуля, я бы хотел организовать проекты в такую ​​структуру:

project.arm.object.method();

Где «проект» - это мое глобальное имя проекта, «рука» - это подраздел или ветвь проекта, «объект» - это отдельный объект и т. Д. С методами и свойствами.

Однако я не уверен, как я должен объявлять и организовывать несколько «рук» и «объектов» в «проекте».

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

project.arm.object = (function() {

    var privateVar = "Private contents.";

    function privateMethod() {
        alert(privateVar);
    }

    return {
        method: privateMethod
    };

}());

Существуют ли передовые практики или соглашения при определении сложной структуры модуля? Должен ли я просто объявить новую руку / объект под последним?

Ответы [ 3 ]

20 голосов
/ 27 апреля 2010

Вот хорошая статья о том, что вы ищете; http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

3 голосов
/ 27 апреля 2010

Dojo's 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.require и dojo.provide.

2 голосов
/ 27 апреля 2010

Существует множество нюансов того, как люди предпочитают это делать, но главное преимущество того, что вы называете модульным шаблоном (именованная область), заключается в том, что вы не загромождаете глобальное пространство имен, что помогает чистить, если вы вносите в другие библиотеки и т. д., и избегает конфликтов имен.

То, как вы организуете имена и вложенные области видимости, во многом зависит от личных предпочтений.

...