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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Создадим файл C<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>

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

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

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

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

Будет вызван метод I<Method> у объекта I<test>. Имена публичных методов, которые доступны для обращений из-вне начинаются с большой буквы. Имена объектов с любой. В случае, если имя метода не указано используется I<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



=end pod
