Зачем управлять беспорядком

Для любых проектов, кроме самых маленьких, преимущества описываемого подхода не вызывают сомнений. Простота в обслуживании и легкость расширения или встраивания программного кода в разные страницы являются ключевыми аспектами, которые позволят быстро и эффективно выполнять работу. Разумеется, преимущества импортирования программного кода описываемым способом не всегда были очевидны для вебразработчиков, и изза неподобающей организации управления исходным программным кодом многие вебпроекты превратились в сложные для сопровождения чудовища. Например, обычно, когда необходимо взять файл JavaScript, находящийся в постоянном каталоге на вебсервере, и вставить его в страницу, используется примерно такой тег SCRIPT:


Хорошо, возможно, нет ничего страшного, когда в странице присутствует один или два тега SCRIPT, но что, если имеется много страниц, которые пользуются теми же инструментами, требующими загрузки тех же самых сценариев? Тогда, вероятно, вам придется включить те же самые теги SCRIPT во все эти страниц. В конечном счете, у вас может оказаться значительное число таких сценариев, и, когда вам потребуется вручную отследить их все, эта задача может оказаться непосильной.


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

Как можно управлять всем этим, не имея хорошего инструмента, выполняющего отложенную загрузку и загрузку по требованию? Кроме смягчения кошмара управления конфигурацией, который ждал бы вас в противном случае, абстракции dojo.provide и dojo.require так же делают возможным применение инструментов сборки из библиотеки Util. Это позволяет, например, упаковывать несколько файлов (не забывайте, что для загрузки каждого из них требуется выполнить синхронный запрос) в одинединственный файл, что влечет за собой уменьшение временных задержек. Без правильных абстракций, явно определяющих зависимости, все функциональные особенности инструментов сборки были бы невозможны.

Еще одно преимущество четко определенной связи, как между dojo.pro-vide и dojo.require, заключается в возможности управления родственными ресурсами путем объединения их в пространства имен, что позволяет минимизировать конфликты имен и упростить организацию и поддержку программного кода.


Хотя пространства имен в Dojo – это всего лишь иерархии вложенных объектов, доступ к которым осуществляется с применением точечной нотации, тем не менее эти иерархии являются весьма эффективным средством организации пространств имен и хорошо выполняют эту задачу.

Организация ресурсов по пространствам имен является настолько базовой, что инструментальный набор Dojo снабжает библиотеку Base функцией dojo.setObject. Эта функция принимает два аргумента. Первый аргумент – это иерархия объектов, которая должна быть создана, а второй – значение, которое должно быть отображено в эту иерархию:
dojo.setObject(/* String */ object, /* Any */ value, /* Object */ context)
//возвращает Any
Пример 2.2 иллюстрирует применение этой функции.
Пример 2.2. Организация пространств имен с помощью функции
dojo.setObject
var foo = {bar : {baz : {qux : 1}}}; //"длинное" объявление
//вложенных объектов
console.log(foo.bar.baz.qux); //выведет 1
//То же самое можно сделать короче, не беспокоясь о соблюдении
//парности скобок
dojo.setObject("foo.bar.baz.qux", 1); //более очевидный синтаксис
console.log(foo.bar.baz.qux); //выведет 1
//Если в дополнительном аргументе передать функции контекст, иерархия
//объектов будет создана относительно указанного контекста, а не глобального,
//определяемого dojo.global
var someContext = {};
dojo.setObject("foo.bar.baz.qux", 23, someContext);
console.log(someContext.foo.bar.baz.qux); //выведет 23

Функция dojo.setObject – это не что иное, как синтаксический подсластитель, но в случае необходимости она может помочь ликвидировать нагромождения в программном коде, избавить от нудной работы по подсчету парных скобок и т.


д.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
Аргументы «функции в виде строк»
Блочная модель
Грубое определение типа
Добавление узлов
Изменение стилей узлов

Вернуться в раздел: Dojo / Утилиты броузера