Для чего экстендеры разделили на два типа?

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #1 korshunov » 02.06.2021, 10:04

В документации по модулям есть такое:

Экстендеры могут работать как в режиме ChainExtender (цепочный вызов)так и QueueExtender (поочерёдный вызов).
Экстендеры, которые работают в режиме Chain, передают друг другу модифицированный результат.
Они ОБЯЗАТЕЛЬНО должны возвращать результат, который передал вышестоящий хелпер или экстендер.
Экстендеры работающие в режиме Queue, ничего не возвращают. Они просто вызываются по очереди.
В них можно описывать какие-то процедуры, которые не модифицируют данные возвращаемые хелпером.

В связи с этим вопрос: для чего экстендеры разделили на два типа?
Если разница только в модифицикации/немодифицикации данных, то куда как логичнее обязать экстендер ВСЕГДА возвращать результат - если не модифицировали, то в чистом виде исходные данные. Код стал бы поменьше...

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #2 zyxer » 04.06.2021, 09:39

Ну тут чисто философский вопрос. Я наоборот, за то, чтобы дать возможность, а вы решайте что именно и как использовать
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #3 korshunov » 04.06.2021, 09:56

У этого вопроса есть и практическая сторона с вполне конкретной ошибкой проектирования.
В текущей реализации сделано так - сначала выполняются все экстендеры Chain, а затем - все экстендеры Queue. И если разработчики будет аккуратно подразделять экстендеры в зависимости от того, надо или нет модифицировать результат, то общий порядок нарушится.
Простейший пример. В модуле MChain применен экстендер Chain, в модуле МQueue - экстендеры Queue. И тогда установкой порядка модулей НИКАК не добиться, чтобы экстендер из МQueue выполнялся ранее экстендера MChain. Это потенциальный источник проблем...

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #4 zyxer » 04.06.2021, 10:03

Да, об этом думали. Хоть и вероятность что это создаст проблемы не велика, но в принципе, возможно вы и правы. Еще внутри команды поднимем этот вопрос, может действительно сделаем Queue deprecated и тогда буде вообще один экстендер, а Chain будет его алиасом (для совместимости).
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 41 гость