Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пакеты 
:(
    Опции темы
Се ля ви
Дата 24.4.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 5
Всего: 127



Давно мучался проблемой всё нарастающего бардака при написании больших библиотек скриптов. Их можно структурировать, разбивать по разным JS-файлам, но остаются потенциальные конфликты имён и проблемы поиска в этой массе одноуровневого кода из сотен мелких и не очень функций, связанных причудливыми взаимоотношениями до описания которых нет никакого внятного средства на подобии UML`а.

В сложных проектах нам нужна чёткая структура. Нужны пакеты, как в более серьёзных языках программирования.

И вот, недавно придумал простое решение - в качестве пакетов использовать пользовательские объекты smile

Тогда вместо оператора "import" можно использовать "with". И всё становится на свои места.

Действительно, конструкция 
Код
with (com.mycompany.listeners) {

    document.getElementById("sendButton").onclick = BlockPage.blockLinksAndButtons;

}

...что бы при отправке формы все ссылки блокировались во избежание двойного нажатия или нажатия на какую-нибудь ссылку...

Конструкцией for..in любая среда разработки может узнать все методы любого объекта. Да и мы можем прогнать простейший скриптик, который всё это аккуратненько выведет в табличку...

Конечно, при импорте большого количества библиотек, нагромождение вложенных with`ов будет смотреться не очень, но это это всё-таки лучше, чем всё в одной каше.

Что скажете?




--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
ksnk
Дата 24.4.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(Се ля ви @  24.4.2007,  14:04 Найти цитируемый пост)
Нужны пакеты, как в более серьёзных языках
 Что такое пакеты? Классы? наследование? 
А вот это не напоминает вам "нормальную" систему описания наследования?



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Се ля ви
Дата 24.4.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 5
Всего: 127



Цитата(ksnk @  24.4.2007,  14:35 Найти цитируемый пост)
Что такое пакеты? Классы? наследование? 

Нет, пакеты - это не классы и не наследование. Пакеты - это пакеты. Ещё их называют namespaces - в C++ они именуются так.

Добавлено через 3 минуты и 16 секунд
ну тоесть я не хочу сказать, что пакеты в Java аналогичны namespaces в C++ - там есть отличия, но не такие уж они значительные...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
ksnk
Дата 24.4.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Можно в один объект слить все свойства нескольких и обозвать все это добро namespace'ом.
что-нибудь вроде 
Код

var NS=NAMESPACE([com.mycompany.listeners,document,...])
NS.getElementById("sendButton").onclick = NS.BlockPage.blockLinksAndButtons;

Чем не Namespace? smile




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Zeroglif
Дата 24.4.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Се ля ви @  24.4.2007,  14:04 Найти цитируемый пост)
Что скажете?

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

Цитата(ksnk @  24.4.2007,  20:03 Найти цитируемый пост)
Можно в один объект слить все свойства нескольких и обозвать все это добро namespace'ом.

Именно. Для примера на яхе работает что-то подобное, сначала большой и толстый объект, потом через функцию надстройки по требованию:
Код

if (typeof YAHOO == "undefined") {
    var YAHOO = {};
}

//Returns the namespace specified and creates it if it doesn't exist
YAHOO.namespace = function() {
    var a=arguments, o=null, i, j, d;
    for (i=0; i<a.length; i=i+1) {
        d=a[i].split(".");
        o=YAHOO;

        // YAHOO is implied, so it is ignored if it is included
        for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; j=j+1) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }

    return o;
};



PM MAIL WWW   Вверх
Се ля ви
Дата 25.4.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 5
Всего: 127



Zeroglif, спасибо. Наверное, этот способ действительно лучше. Вот только код малость запутанный... Я не увидел - как им в итоге пользуются?


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
ksnk
Дата 25.4.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(Се ля ви @  25.4.2007,  17:53 Найти цитируемый пост)
Я не увидел - как им в итоге пользуются?
Да вот так  smile 
Код

YAHOO.namespace(com.mycompany.listeners,document,...)
YAHOO.getElementById("sendButton").onclick = YAHOO.BlockPage.blockLinksAndButtons;


Это сообщение отредактировал(а) ksnk - 25.4.2007, 18:26


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.