Может ли цепочка ответственности иметь несколько узлов для изменения запроса?

Если у меня есть несколько узлов, которым нужно будет изменить запрос, стоит ли по-прежнему использовать шаблон проектирования «Цепочка ответственности»? Или этот шаблон следует использовать только тогда, когда только один (неизвестный) узел будет обрабатывать запрос исключительно?

IE: узел 2 и узел 3 должны будут повлиять на запрос (R). Таким образом, несмотря на то, что узел 2 обрабатывает запрос, я все равно хочу продолжать передавать запрос по списку следующему обработчику.

                    +--------+ (R)  +--------+ (R)  +--------+ (R)
Client Request (R)  | Node 1 |----->| Node 2 |----->| Node 3 |----->etc...
                    +--------+      +--------+      +--------+

person veilig    schedule 12.11.2012    source источник
comment
А? Что вы пытаетесь сделать в php с помощью этого дизайна?   -  person Naftali aka Neal    schedule 12.11.2012
comment
@Neal На сайте PHP в системе * nix мне нужно создать модуль, который должен проверять разрешения и настройки пользователя / группы дерева каталогов. Таким образом, для каждого запроса в дереве мне нужно отправить его вниз по этой цепочке, где узел 1 может проверить, является ли запрос каталогом, и проверить, установлены ли правильные разрешения, а узел 2 может проверить, является ли запрос файлом, и проверить разрешения . Но тогда каждый запрос также должен проверять набор пользователей/групп для каждого запроса. Но вы правы - мне не нужно было помечать этот вопрос как PHP (привычка)   -  person veilig    schedule 13.11.2012


Ответы (1)


С моей точки зрения, лучше использовать шаблон конвейеры и фильтры, так как каждый шаг добавляет некое преобразование и/или проверка.

Это изображение взято из приведенного выше

введите здесь описание изображения

В любой момент один из фильтров может решить обработать запрос и не передавать его следующему фильтру. В приведенном выше примере (если бы это был http-запрос) неаутентифицированный запрос привел бы к коду статуса 401 http.

person Augusto    schedule 12.11.2012
comment
разве это не просто цепочка ответственности? - person veilig; 14.11.2012