В ходе расширения имеющегося функционала иногда нужно изменить запрос.
Например CIblockElement::GetList - добавить к нему свои таблицы. В данный момент есть вариант лишь выноса (модифиация не рассматривается) данной функции в новый класс, который будет расширять имеющийся (extends) CIblockElement. Но тут необходимо создавать кастомные компоненты и везде заменять CIblockElement:GetList на (например) CCustomIblockLement::GetList.
Это все опять же внесет свои коррективы при установке модуля, такие как копирование шаблонов компонентов в кастомизированные и др., что для пользователя сложно.
И ваш BeforeQuery, КАК МИНИМУМ, обойдется в:+ 50 вызовов GetModule
+ 50 вызов call_user_func
И вы наверняка будете делать какие-то strpos, preg_match, чтобы понять, тот ли это запрос. Это еще +50 да +50.
+200 лишних вызовов функций на один хит. Не кажется ли дороговато?
PS: За +7 лет я ни разу не столкнулся с расширением класса Ciblockelement. Придумывайте иную архитектуру, если зашли в тупик.
И ваш BeforeQuery, КАК МИНИМУМ, обойдется в:+ 50 вызовов GetModule
+ 50 вызов call_user_func
И вы наверняка будете делать какие-то strpos, preg_match, чтобы понять, тот ли это запрос. Это еще +50 да +50.
+200 лишних вызовов функций на один хит. Не кажется ли дороговато?
Можно согласиться с тем, что предложил я не самый лучший вариант, но что все можно построить, используя лишь встроенные средства - с этим не могу согласится.