Я интересуюсь использованием Шаблона Модуля для лучше организации моих будущих проектов. К сожалению, существует только несколько кратких учебных руководств и примеров подтверждения концепции Шаблона Модуля.
Используя шаблон модуля, я хотел бы организовать проекты в этот вид структуры:
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
};
}());
Есть ли какие-либо лучшие практики или конвенции при определении сложной структуры модуля? Я должен просто объявить новую руку/объект под последним?
Вот хорошее описание того, что вам нужно; http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
Есть много нюансов того, как люди предпочитают это делать, но главное преимущество того, что вы называете шаблоном модуля (именованная область видимости) , заключается в том, что вы не загромождаете глобальное пространство имен, что помогает сохранить чистоту, если вы добавляете другие библиотеки и т.д., и позволяет избежать конфликтов имен.
То, как вы организуете имена и вложенные области видимости, в значительной степени зависит от личных предпочтений.
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.require
и dojo.provide
.