Xpoint
   [напомнить пароль]

Framework, общие идеи. Прошу совета

Метки: [без меток]
2008-09-26 12:41:14 [обр] im4LF[досье]

Сначала приведу схему работы, затем описание.

+----------+
| qRequest |
+----------+
     |
     |
     |     +-----------------+
     +-->  | qRequestManager |
     |     +-----------------+
     |              |
     |              |     +------------------+                                                  +-----------+
     |              +-->  | qResponseManager |  --------------------------------------------->  | qResponse |
     |                    +------------------+                                                  |           |                                        
     |                                                                                          |           |
     |     +--------------------------------------------------------------------------------+   |           |
     +-->  | qController                                                                    |   |           |
           |                                                                                |   |           |
           |  +---------+       +------------+       +--------------+       +------------+  |   |           |
           |  | qRouter |  -->  | qModLoader |  -->  | qInputFilter |  -->  | qModRunner |  |   |           |
           |  +---------+       +------------+       +--------------+       +------------+  |   |           |
           |                                                                                |   |           |
           +--------------------------------------------------------------------------------+   |           |
                    |                                                                           |           |
                    |     +--------------+                                                      |           |
                    +-->  | %UserModule% |                                                      |           |
                          |  ----------  |                                                      |           |
                          |   %Action%   |                                                      |           |
                          +--------------+                                                      |           |
                                  |                                                             |           |
                                  |                                                             |           |
       +---------+                |                                                             |           |
       | qViewer |  <-------------+                                                             |           |
       +---------+                                                                              +-----------+
            |
            |
+-----+     |
| end |  <--+
+-----+

Описание:

qRequest — содержит в себе всю информацию о пришедшем запросе (REQUEST_URI, _GET, _POST, ...)

qRequestManager — менеджер всех пришедших запросов. Содержит стек всех запросов и активный запрос, который обрабатывается в данный момент

qResponseManager — менеджер ответов, для каждого пришедшего запроса создает объет qResponse, так же составляется стек ответов и имеется активный ответ

qResponse — ответ на активный запрос. Данный объект содержит всю информацию, которую будут отдавать пользовательские методы в ходе своей работы, а так же служебная инфа будет присутствовать от системных модулей

qController — думаю без комментариев

qRouter — парсит пришедший REQUEST_URI, выделяет так называемый path, action и все переменные. Переменные могут быть нескольких типов: path-args (те что заданы например таким образом: /company/news/id:10), get-args - обычный _GET.
Так же qRouter определяет по path какой модуль необходимо запустить, если нет такого path на сайте, то соответственно модуль будет 404

qModLoader — загружает конфу модуля. Конфа модуля содержит список возможных действий. Отмечено действие по умолчанию (для случая когда что-то некорректно указано или просто не указан action). Так же в конфе хранится описание каждого action - жестко типизированы входящие параметры для каждого action'a (заданы типы string, text, login, password, email, integer,...)

qInputFilter — фильтрация входящих данных по правилам описанным в конфе модуля

qModRunner — запуск самого модуля и его action'a на исполнение

%UserModule%, %Action% — без комментариев

qViewer — вывод результата - в общем шаблонизатор. Тягает данные из qResponseManager. Почему из qResponseManager, а не из qResponse? Предполагаю что будут случаи когда один модуль будет запрашивать другой, соответсвенно будет несколько ответов. Т.е. возможна такая ситуация:

+----------+
| qRequest |
+----------+
     |
     |                                       +-----------------+
 +-->+--> (qResponse, qController, ...) -->  |  %UserModule%   | 
 |                                           |   ----------    |
 |                                           |    %Action%     |
 |                                           |  call some url  |
 |                                           +-----------------+
 |        +----------+                                 |
 +------  | qRequest |  <------------------------------+
          +----------+

Так же стоит подумать над такими объектами как qUser, qCheckAccess. Думаю их внедрение в схему работы можно будет сделать с помощью hook'ов. Например между вызовами ( --> ) в схеме поставить before и after хуки.

А вот собственно и вопрос... Не могу придумать изящный вариант вызова хуков. Вот один вариант такой, но писать в методах не очень хочется...

qRequest->send(); // посылает запрос в контроллер

// сам класс
class qRequest {
    fucntion send () {
        qHook::dispatch('qRequest',qHook::BEFORE);
        ...
        qHook::dispatch('qRequest',qHook::AFTER);        
    }
}

Прошу помочь советом/критикой. Спасибо.

спустя 1 день 10 часов [обр] Pil(0/22)[досье]
А зачем Вы изобретаете велосипед? Уже имеющегося и отточенного не хватает?
спустя 10 часов [обр] im4LF[досье]

Я бы не хотел начинать обсуждение этого вопроса. У каждого есть своё мнение, полагаю что он при нём и останется.
Буду рад комментариям по теме.

Спасибо.

Powered by POEM™ Engine Copyright © 2002-2005