AOP кто пробовал в продакшене?

Yoskaldyr

"Спамер"
Партнер клуба
Кто нибудь пробовал какую либо AOP php библиотеку в продакшене?
Насколько это все стабильно?

Немного погуглил и из активно развивающихся только goaop нашел :(

Может есть какие альтернативы?
 

Adelf

Administrator
Команда форума
исскуственная это хрень. не люблю такое. И, видимо, не я один :)
 

fixxxer

К.О.
Партнер клуба
исскуственная это хрень. не люблю такое. И, видимо, не я один :)
Когда я слышу про АОП, я вспоминаю про оператор comefrom.

Не, временами-то оно полезно, но редко у кого получается остановиться, и получается spring framework.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@Yoskaldyr, по своей природе для нормальной работы aop нужен app server. Иначе парсинг aop-шных конфигов из аннотаций и разворачивание его инфраструктуры будет тяжеловато.
Нормальный в java подход.
 

Yoskaldyr

"Спамер"
Партнер клуба
Кстати насчет аннотаций - программирование на аннотациях как-то реально напрягает :(
Хотя в том-же goaop появилась возможность и без них все описывать.

Просто стоит задача расширять код где расширяемость не предусмотрена изначально. И тут или писать свой велосипед (реально не хочется) или использовать ранкит (как-то перебор) или использовать какие-то готовые решения типа aop библиотек.

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

Yoskaldyr

"Спамер"
Партнер клуба
И еще насколько я понял практически все пхп aop-велосипеды используют кеш патченных файлов, так что по идее тяжело должно быть только при первой загрузке класса, а дальше следующие обращения буду работать уже с патченным файлом как с обычным.
 

fixxxer

К.О.
Партнер клуба
Можно взять nikic-parser, сделать хук на композер/автолоад и "компилировать" на лету. Типа как вон с дженериками Феррара делал.

:)
 

Yoskaldyr

"Спамер"
Партнер клуба
Можно взять nikic-parser
Ну goaop тоже через него работает. Просто там где мне надо патчить композер не поможет. И "не поможет" от слова совсем, т.к. надо патчить очень лютый говнокод.
Если быть точнее некоторые части битрикса написанные индусом. И самое смешное что именно индусом (я не думал что под битрикс индусы пишут).
Поэтому ищу самый простой способ вклиниться в тот адов код.
 

Yoskaldyr

"Спамер"
Партнер клуба
И еще - попросили родственники с классической просьбой - "тыж программист". Так что тут вопрос как побыстрее сделать и забыть это как страшный сон.

Поэтому вопрос все тот-же. Кто-нибудь пробовал в продакшене какой-либо aop на пхп или нет? Или какие еще есть способы для патчинга на лету произвольных пхп классов?
 

fixxxer

К.О.
Партнер клуба
попросили родственники с классической просьбой - "тыж программист"
Сочувствую =)

Вон бадушники сегодня статью на хабре опубликовали (про переход на семерку), они для тестирования легаси написали этакий упрощенный аналог ранкита, работающий похожим на aop-реализации образом (через ники-парсер), с реврайтом во время инклюда - можно прикрутить туда кэш, переписать смешные куски типа exec(find) - и покатит для продакшена, наверное.
 

HORO

Новичок
fixxxer
PHP:
$out = [];
exec('find ' . escapeshellarg($php_parser_dir) . " -type f -name '*.php'", $out);
foreach ($out as $f) {
    require_once($f);
}
:eek:
 

fixxxer

К.О.
Партнер клуба
Ага, я упомянул там, меня тоже повеселило. Не, ну для тестов-то какая разница :)
 

Yoskaldyr

"Спамер"
Партнер клуба
в говнокоде обычно меняют исходники
Это да, но я не хочу то говно даже трогать и мне тупо жалко своего времени. И единственная польза что не будут трахать мозг.
Я нашел место где добавить код, но просто исправить исходники нельзя, т.к. код может обновиться (вернее обновляется раз в месяц) и каждый раз туда лезть для вставки /модификации кода - я точно не буду.

Да и весь битрикс говнокод если на то пошло, но менять его никто не будет.

@fixxxer, Насчет SoftMocks спасибо. Думаю это подойдет, у кого-кого но у ***** оно точно проверено в боевых условиях. Производительность не сильно важна, главное чтобы в ближайшее время мне не пришлось возвращаться к этому коду.
 

fixxxer

К.О.
Партнер клуба
@fixxxer, Насчет SoftMocks спасибо. Думаю это подойдет, у кого-кого но у ***** оно точно проверено в боевых условиях. Производительность не сильно важна, главное чтобы в ближайшее время мне не пришлось возвращаться к этому коду.
С одной стороны, я бы с осторожностью называл запуск юнит-тестов боевыми условиями. С другой стороны, то, что на их десятках mloc-ов оно работает, хороший признак.
UPD: а чот я прозвездоглазил, там же есть кэш
 

Yoskaldyr

"Спамер"
Партнер клуба
мм так а если обновления будут то как go aop поможет?
мне надо выполнить код до и после конкретного метода и все. Шанс что поменяется сигнатура этого метода практически нулевой. Объяснить владельцу сайта - найди этот код замени на этот - не вариант (100% что-то сломает).
Поэтому самый простой и менее геморный для меня вариант - использовать какой-то велосипед типа aop или ранкита.
 

HORO

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

Yoskaldyr

"Спамер"
Партнер клуба
ну так без всяких аопов можно обычный парсер написать, запускать после апдейта и пусть он ищет нужные "сигнатуры" и дополняет соотв. кодом.
Здесь стоит вопрос чтобы все само без моего участия.
Можно и свой велосипед на базе автолоадера сделать, но зачем свой если есть готовые решения.
 
Сверху