Пакеты

Материал из Eludia
Перейти к: навигация, поиск

Одному WEB-приложению на базе Eludia.pm, как правило, соответствует ровно один пакет. Имя этого пакета не должно фигурировать нигде в коде программы (в тех редких случаях, где оно необходимо, можно использовать переменную $_PACKAGE), оно настраивается в рамках каждой отдельной инсталляции — это позволяет совмещать несколько приложений в рамках одного perl-интерпретатора. В настоящей документации принято именовать такой пакет MY_APPLICATION.

Пакет MY_APPLICATION содержит следующие объекты:

Функционирование WEB-приложения в основном сводится к тому, что WEB-сервер вызывает процедуру handler 1 раз контексте каждого очередного HTTP-запроса. handler формирует HTTP-ответ, вызывая те или иные процедуры приложения, которые, в свою очередь, используют API.

Загружаются процедуры в пакет приложения просто (примитивно): исполняется perl-код с их описанием. Далее стандартные API-процедуры и процедуры приложения абсолютно равноправны, видят и могут вызывать друг друга. Любая API-процедура может быть переопределена на уровне приложения (естественно, так можно поступать только в случае крайней необходимости). При загрузке N приложений в 1 интерпретатор создаётся N копий каждой API-процедуры. Ни массив @ISA, ни что-либо подобное не используется.

Для загрузки Eludia-приложения предназначен модуль Eludia::Loader. Он используется следующим образом:

use Eludia::Loader

'.../my_application/lib' => 'MY_APPLICATION' 
		
, {

   db_dsn => "...",
   db_user => '...',
   db_password => '...',
   ...

};

1-й параметр (директория) — путь к библиотекам приложения, 2-й — имя целевого пакета, 3-й (хэш) — опции инсталляции, доступные в приложении как значение глобальной переменной $preconf.

Eludia::Loader, как правило, вызывается в perl-секции файла conf/httpd.conf. При использовании WEB-серверов, отличных от Apache/mod_perl, конфигурация приложения всё равно (традиционно) описывается в этом файле, адаптеры Eludia.pm для всех используемых WEB server API рассчитаны на это.

Eludia::Loader импортирует в пакет не весь API и не весь код приложения. Отдельные процедуры API могут подгружаться по мере надобности, а процедуры приложения — по запросу и в последней версии (отслеживается время последнего изменения каждого файла).

Разумеется, MY_APPLICATION — далеко не единственный пакет, загружаемый в память Perl-интерпетатора. И API, и приложение используют множество сторонних модулей (например, DBI, DBD-драйвер и пр.), каждый из которых размещается в собственном пространстве имён — единожды — и используется оттуда всеми приложениями.

API Eludia.pm также использует несколько дополнительных пакетов, имена которых начинаются на 'Eludia::'. В основном это презентационные модули ($_SKINs) с именами вида 'Eludia::Presentation::Skins::MySkinName'. Каждый $_SKIN, как и сторонние модули, загружается в свой пакет лишь единожды.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты