AOP, использование в PHP

Adelf

Administrator
Команда форума
AOP, использование в PHP

AOP , PHP

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

Использовал кто данный подход в PHP? Каковы результаты? "Куча кода, которого не видно" убивает все преимущества?
 

Adelf

Administrator
Команда форума
Alexandre ну я может не разобрался, но у него в свн alpha 0.1 выложенная в январе 2007 и больше ничего. Неужели этой альфы всем достаточно оказалось, что больше ничего и не надо?

-~{}~ 13.11.09 13:47:

http://code.google.com/p/apdt/ - вот это вот не смотрел... погляжу.
 

Alexandre

PHPПенсионер
я не занимаюсь аспектами, это тебе надо обращаться к пачанде. Он спец по аспектам, если я не ошибаюсь.
 

Adelf

Administrator
Команда форума
>> я могу быть не прав, но мне кажется аспекты усложняют программирование.

Вот примерно ради таких мыслей и создавалась тема :)
Я прочитал статью на AgileDev - мне понравилось, порыскал по инету - энтузиазма убавилось. Хотел тут спросить - возможно использовал кто.
 

atv

Новичок
Я бы с удовольствием использовал бы, но... решений нормальных нету.

Пробовал использовать для этой цели расширение runkit, но к сожалению, в нём обнаружились баги, которые ограничивают его использование, а поддержка этого расширения уже давно не осуществляется.

Сейчас использую АОП совсем чуть-чуть, для логгирования выполнения запросов к БД. Очень удобно, если мне нужно посмотреть запросы, раскомментирую одну строчку кода, в которой применяется аспект, и всё. Потом опять закомментировал и никаких лишних действий. Не нужно расставлять в драйверах БД вызовы к классу логирования, не нужно добавлять логику дебаг/продакшн режима и т.д.

Тут в прошлом году проскакивала интересная идея, перехватывать обращения require_once() и расставлять в коде код АОП, но автор обиделся на критику, так и не доделал проект.
 

Alexandre

PHPПенсионер
Тут в прошлом году проскакивала интересная идея, перехватывать обращения require_once() и расставлять в коде код АОП, но автор обиделся на критику, так и не доделал проект.
все у нас так, а жаль... у меня у самого была идея пару лет назад сделать АОПешный экстеншен, но идея канула в лету... как впрочем и много других, не менее интересных. Мое мнение - АОП не должен влиять на производительность. Было решение с АОП предпроцессором, который генерит говно-код. Но, мне это как-то не очень воодушевило. А вообще - переход на аспекты - это уже иног угол зрения, иная парадигма.
 

Adelf

Administrator
Команда форума
Alexandre, так это и называется - парадигма. Термин такого же уровня как и ООП.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
imho аспекты с "правильным" PHP несовместимы из-за полной инициализации среды в PHP при каждом вызове

можно будет попробовать с true-fcgi phpdaemon
но маловероятно, что его доделают, т.к. автор явно безразличен к комьюнити
 

atv

Новичок
у меня у самого была идея пару лет назад сделать АОПешный экстеншен
а может runkit подправишь, и уже можно будет юзать АОП

Мое мнение - АОП не должен влиять на производительность.
Любая абстракция влияет на производительность. АОП можно включать и выключать прямо в рантайме.

А вообще - переход на аспекты - это уже иног угол зрения, иная парадигма.
Ну, у АОП тоже есть своя область применения, вне которой он неэффективен. Он не вытесняет ООП, а дополняет его.

аспекты с "правильным" PHP несовместимы из-за полной инициализации среды в PHP при каждом вызове
Инициализация среды при каждом вызове вообще отрицательно сказывается и не только на АОП, т.е. АОП не больше других страдает от этого.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Инициализация среды при каждом вызове очень положительно сказывается на отладке и дебаге.

АОП imho более критично из-за значительного объема инициализации - выставление точек соединений и колбеков/советов, и это не отложить на autoload.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
если бы это было по-настоящему востребовано, думаю, решения уже появились бы
 

Alexandre

PHPПенсионер
если бы это было по-настоящему востребовано, думаю, решения уже появились бы
надо жить по принципу "Кто если не я"... а так все мы ждем чуда, а чудес на свете не бывает...
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
это только если веришь в правильность и нужность того, что делаешь
 

whirlwind

TDD infected, paranoid
Есть практики полезные, но мало распространенные из-за сложности внедрения. А есть мало распространенные и бесполезные. Экзотика не для продакшена.

PS. куча кода, которого не видно
 

korchasa

LIMB infected
whirlwind
+1
Любимые примеры - логгирование, транзакция и авторизация легко решаются front controller'ом и filter chain. Явное лучше неявного.
 

atv

Новичок
выставление точек соединений и колбеков/советов, и это не отложить на autoload.
Не вижу проблем сделать расставление колбэков в autoload, сделали в оработчике автозагрузки require_once, и тут же расставили колбэки, потом этот класс станет доступным в приложении.

Любимые примеры - логгирование, транзакция и авторизация легко решаются front controller'ом и filter chain.
Интересно увидеть логгирование запросов к БД, решаемое через filter chain :confused:

PS. куча кода, которого не видно
Мля, отмазки на уровне фишера про ОРМ. Какая куча, где не видно??? Однотипный код, который содержится в одном месте, а не размазан по нескольким классам? Ну хоть бы, попробовал, чем чушь нести.
 

korchasa

LIMB infected
Автор оригинала: atv
Интересно увидеть логгирование запросов к БД, решаемое через filter chain :confused:
Легко реализуется через навешивание прокси на класс соединения. В чем проблема? о_О

Автор оригинала: atv Мля, отмазки на уровне фишера про ОРМ. Какая куча, где не видно??? Однотипный код, который содержится в одном месте, а не размазан по нескольким классам? Ну хоть бы, попробовал, чем чушь нести.
Он только в примерах однотипный. В реальной жизни к "повесим логгер на все, что начинается на Service" через некоторое время добавляется - "если только это не ServiceLogger" и "если в конструктор не передали password". А потом сидишь у думаешь почему обработчик таки повесился, как бы сделать кастомные логи, да в разные файлы.
Лучше скажи где это реально могло бы помочь. Ну только не любимые три примера.
 

whirlwind

TDD infected, paranoid
atv функции тоже можно содержать в одном месте, однако ни гибкости, ни читабельности по сравнению с ооп это не добавляет. В оценке любого инструмента я использую очень простой критерий: инструмент, который вносит в код соглашения - плохой, инструмент, который вносит в код требования - хороший. АОП позволяет писать основываясь на соглашениях, а не на требованиях, следовательно позволяет писать [зачеркнуто]более раздолбайский[/зачеркнуто] менее контролируемый код.

Если не понятно о чем я говорю, то объясняю на пальцах - соглашение, это когда мы снаружи договариваемся, что такие-то объекты должны работать так-то. А требование, это когда объект сам за себя говорит - мне для работы нужно то-то. Если разница все еще не понятна, то советую подналечь на правильный ооп, чем нести чушь.
 
Сверху