Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая подгрузка библиотек. Перерабатываю CMSку в сторону удобства 
:(
    Опции темы
GoDleSS
Дата 7.8.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день, уважаемый форумчане!

Решил заняться переработкой своей в общем-то отставшей от жизни CMS-ки.
В первую очередь занимаюсь универсализацией и методами повышения удобства создание модулей под нее(на данном этапе нельзя назвать полноценно модульной, но к тому стремлю).

В данный момент поднимаю задачу следующего характера:
 Есть некий набор входящих в дистрибутив библиотек. Часть грузится уже в index.cgi и необходимы для работы системы в целом. Но большинство нужны не всегда и не везде, посему грузить их сразу нет смысла.
 Хотелось бы, чтобы при вызове модулем метода new какого-то пакета эта либа динамически подгружалась.
Сейчас проблема решена заменой вызова конструктора на метод-прослойку.

Т.е. в упрощенном примере:
Код

package constructor;
...
sub create_object {
  my $self = shift;
  my $lib = shift;

  ...

  eval {
    require $lib_checked;
  };
  if ($@) {
    ...
    return 0;
  }

  $self->objects->{$lib} = $lib->new(@_);

  ...

  return $self->objects->{$lib};
}

...

my $formatter = $constructor->create_object('text::formatter', @options);



Но подобный подход себя не слишком оправдывает по нескольким причинам:
  Имя пакета должно строго совпадать с положением библиотеки(хотя это можно решить, читай из либы имя пакета и чуть доточив напильником.
  Модуль, содержащий несколько пакетов, уже будет сложнее использовать.
  Сам вызов не смотрится.
  ...еще много можно нафлудить...

Зачем я сие делаю? Уменьшаю по возможности объем кода теоретических будущих модулей ЦМСки, даю дополнительный потенциал логеру, стараюсь более точно динамически отслеживать работу модулей. Ну и просто интересно smile

Есть ли у кого идеи или наброски по более красивым решениям задачи?

Это сообщение отредактировал(а) GoDleSS - 7.8.2008, 12:42
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
ginnie
Дата 7.8.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый GoDleSS, как вариант, можно посмотреть Class::Autouse.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




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


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

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