Всетаки idea немного не тот пример. IDE значительно более блочный продукт и размер этих логических блоков кода небольшой. Поэтому с точки с точки зрения добавления бизнес логики, редко приходится менять что внутри этих блоков. Плюс это разные языки программирования, можно сделать долгий старт, можно добавить хуки/точки инжекта куда угодно и это практически не будет влиять на производительность. А если и надо заменять, то используют копипаст этого блока, и это не является проблемой. Т.к. для такого большого продукта как IDEA эти небольшие блоки меняются очень редко. Это десктоп приложение, и там приемлемы совсем другие компромиссы.
То же самое нельзя сделать с пхп. В результате будет минимум 2 из 3: тормоз, куча магии или нечитабельный код (и это даже в сравнении с aop).
По идее все можно решить добавить точки инжекта во все более менее критические точки приложения. Но тогда этих точек будут тысячи. И это будет сказываться на читаемости такого кода.
Проблема в том что ну очень часто заказчик хочет изменить совсем немного в какой-то небольшой части бизнес логики и он совсем не хочет каждый раз править код вручную после обновления основного приложения, особенно когда приложение платное. Т.е. напрямую изменить код вообще не составляет проблем - это реально просто и быстро. Но клиентам нужны дальнейшие обновления основного продукта. Если брать более низкий уровень и к примеру если используется кверибилдер, то надо немного изменить запрос перед выполнением, и тогда во всех местах где генерируется запросы надо вставлять точки инжекта, для возможности модификации этих запросов. Аналогично с обращением к сторонним апи и т.д. Т.е. хуки надо ставить везде и в большой количестве.
Это просто статистика, т.к. постоянно есть спрос на модификации готовых решений.
Я знаю что мало программистов напрямую общаются с заказчиками, и что здесь на форуме практически нет программистов связанных с модификацией/интеграцией готовых решений. Потому вопросы не совсем ложатся на стандартные практики. Когда пишется свое приложение для него тупо писать расширение, если можно (а вообще и нужно) просто исправить основной код. Я полностью поддерживаю что для разработки обычных приложений aop нафиг не сдалось (учитывая сложность тестирования и сложность поддержки).
Но речь идет о модульной и полностью расширяемой системе, где не хотелось бы писать точки инжекта мидлварей в любых более менее значимых местах (просто их будет слишком уж много). В том же ксенфоро и мадженто aop используется именно для композиции (хотя и реализовано это все через наследование), а не для aop как такового. И в них все так же есть и обычные события/хуки в тех местах где aop излишне.
p.s. когда говорю об aop я не имею ввиду именно реализацию go-aop, а имею ввиду сам принцип.