NAME

WebDAO - платформа для web приложений

WebDAO - объектно-ориентированная система для создания производительных web приложений, состоящая из набора модулей на языке perl.

Основные принципы

  • Абстракция среды выполнения кода приложения

  • Динамическая структура доменной логики

  • Адресация объектов по URL

  • Встроенная поддержка сессионных параметров

Абстракция среды выполнения кода приложения

Существует большое количество окружений, в которых работают web приложений.

---------------------------------------------
|           mod_perl             Apache     |
| FastCGI                       CGI         |
|           ------------------------        |
|     nginx |                      |        |
|           |      Your code       | isapi  |
|           |                      |        |
|            ----------------------         |
|  Shell            Test::More      IIS     |
|        lighttpd                           |
---------------------------------------------

WebDAO проектировалась с целью избавить разработчика от деталей среды работы приложения, снизить затраты при смене окружения, а также упростить отладку и тестирование приложений. Важной целью является упрощение и повышение скорости web разработки.

Динамическая структура доменной логики

Структура объектов доменной логики формируется на основе XML(HTML) файла. Имя файла может быть производным. Для примера, его имя пусть будет привычным для web разработчиков : index.xhtml.

<body>
<div>
 <wd>
   <object class="MyTest" id="page"/>
 </wd>
</div>
</body>

В этом тексте, кроме XHML тэгов, используются дополнительные, например: wd и object. Тэг wd является признаком начала специальной ( интерпретируемой) области. Пока отсутствует поддержка пространств XML имен, но со временем, я обещаю, она появится.

Тэги wd обрамляют область, в которой располагаются определения объектов и другие интерпретируемые тэги. В приведенном примере, с помощью command создается экземпляр класса MyTest и идентификатором page. Именно идентификатор объекта используется в URL. Например:

http://example.org/page
http://example.org/page/Method?par1=1&par2=2

В состав пакета WebDAO входит лексический анализатор, который обрабатывает этот файл и на основе xml тэгов строит структуру объектов.

Создадим файл MyTest.pm со следующим содержимым:

package MyTest;
use WebDAO;
use base 'WebDAO::Component';

sub fetch {
    "Hello Web X.0!";
}
1;

Каждый из объектов доменной структуры, участвующих в формировании результатов, отображает себя сам. Поэтому, в приведенном примере, результирующий XHTML будет выглядеть следующим образом:

<body>
<div>
   Hello Web X.0!
</div>
</body>

Адресация объектов по URL

Одна из основных идей WebDAO - отображение URL на доменную структуру объектов.

Например, для адреса:

http:://example.com/test/Method?param=1&param2

Будет вызван метод Method у объекта test. Имена публичных методов, которые доступны для обращений из-вне начинаются с большой буквы. Имена объектов с любой. В случае, если имя метода не указано используется index_x. Если этот метод отсутствует у объекта, возвращается статус "404: Not found". Таким образом адреса:

http:://example.com/test/?param=1&param2
http:://example.com/test/

Эквивалентны вызовам

http:://example.com/test/index_x?param=1&param2
http:://example.com/test/index_x

Встроенная поддержка сессионных параметров

В WebDAO встроена поддержка сессионных параметров. Схематически ее можно представить следующей диаграммой объектов:

+-----------------+      load    +------------------+   Storages:
|                 | <----------  |                  | -> MLDBM files
| Session object  |     store    | WebDAO::Store::* | -> Storable files 
|                 | ---------->  |                  | -> MemCached,MemCacheDB
+-----------------+              +------------------+ -> Custom storage ...
    ^          |
   /|\         |
    |          |
    |         \|/
    |          V
+-----------------+
|                 |
|  WebDAO::Engine |
|                 |
+-----------------+

Для этого достаточно выбрать источник хранения в конфигурации web сервера и указать атрибуты объекта в наследуемом классе.

Пример конфигурации (Apache web server):

<VirtualHost *>
    ...
    #set Storable storage
    SetEnv wdStore WebDAO::Store::Storable
    #path for store
    SetEnv wdStorePar path=/tmp/sessions

    #Track session via cookies
    SetEnv wdSession WebDAO::Sessionco
    ...
</VirtualHost>

В тексте модуля также необходимо создать атрибуты:

package MySess;
use WebDAO::Component;
use base 'WebDAO::Component';

# Определение  сессионных атрибутов и 
# их значений по умалчанию
     
__PACKAGE__->mk_sess_attr( attr1 => undef, _attr2 => undef );

sub UseAttr {
    my $self = shift;
    # read
    my $val = $self->attr1;
    ...
    $self->attr1('test_value');
}

1 POD Error

The following errors were encountered while parsing the POD:

Around line 3:

Non-ASCII character seen before =encoding in 'платформа'. Assuming UTF-8