Будущее Аспектно-ориентированного программирования
Я новичок в области АОП. Когда я впервые что-то кодировал, применяя концепции АОП, я был взволнован, чтобы понять, как аспекты устраняют сквозные шаблоны в вашем приложении. Я был ошеломлен мыслью о решении сквозных схем, таких как безопасность, ведение журналов, транзакции, аудит и т. Д., Применяя АОП.
Однако, когда я впервые предложил использовать AOP клиенту, на которого я работаю, мне сказали, что они его не поддерживают. Мне сказали, что АОП означает больше обслуживания! Ваши точки должны измениться, если ваш код меняется. Следовательно, вам, возможно, придется анализировать, изменять и тестировать свои аспекты всякий раз, когда вы меняете код, к которому они были применены?
Что вы можете сказать по этому поводу? Почему основные компании еще не открыты для широкого использования АОП? Куда движется мир АОП?
6 ответов
АОП является относительно новой концепцией, и крупные компании, как правило, настороженно относятся к новым концепциям. Они боятся застрять с большим количеством кода АОП и не могут найти людей, которые могут его поддерживать.
Что касается конкретной критики, она кажется неосведомленной или неправильно понятой. Весь смысл АОП состоит в том, чтобы сократить объем работ по техническому обслуживанию за счет уменьшения дублирования кода в области сквозных задач. Тем не менее, это правда, что это может усложнить обслуживание, усложняя понимание кода - с помощью AOP, когда вы смотрите на определенный фрагмент кода, всегда есть вероятность, что аспект, определенный где-то еще, полностью изменит свое поведение.
Лично я не уверен, что преимущества АОП (неужели так много сквозных проблем?) Перевешивают эту проблему. Единственный способ решить эту проблему - поддержка в IDE; но сделать вас еще более зависимым от IDE тоже не такая уж хорошая вещь.
Кажется, что наблюдается тенденция к серверам приложений и инфраструктурам, которые решают конкретные важные межсекторальные проблемы, такие как транзакции и безопасность, аналогично AOP (то есть центральному декларативному определению), но не дают вам полной возможности сбить с толку разработчиков обслуживания.
AOP - это одна из тех интересных идей, которая не очень хорошо работает на практике. В Java AOP был доступен в течение десятилетия или более, и он используется нечасто, потому что кажется, что он создает больше проблем, чем исправляет.
Мне сказали, что АОП означает больше обслуживания!
Это просто глупо и совершенно неправильно. AOP является важным инструментом для извлечения шума из вашего кода и позволяет вам сосредоточить свои усилия на обеспечении ценности для бизнеса. Когда бизнес-правила меняются, вам не нужно пробираться сквозь мили логики фреймворка, чтобы отразить новые изменения в вашем коде.
Как и любой инструмент, вы должны убедиться, что используете его правильно. Мне пришлось обойти тот факт, что при записи в лог AOP по неосторожности регистрировались расшифрованные кредитные карты:
http://www.agileatwork.com/what-happens-when-you-actually-use-aop-for-logging/
Мы используем реализацию AspectJ AOP и очень довольны ею. Вы должны рассмотреть это просто еще одну часть вашего инструментария, которая делает некоторые концепции легче выразить, чем в "обычной" Java. В настоящее время мы используем его в основном для предоставления JMX-интерфейсов нашим сервисам.
Это правда, что больше IDE должны поддерживать его (я смотрю на вас JetBrains!), Что, безусловно, поможет принятию.
Люди забывают, что аннотации Java и их использование в таких средах, как Guice и Spring, были вдохновлены AOP. Я бы сказал, что аннотации Java - это то, к чему сегодня стремится АОП.
Мне пришлось оптимизировать производительность приложения, и я решил написать собственный профилировщик в AspectJ. Сначала я скептически относился к использованию АОП, но понял, что это абсолютно идеальный инструмент для работы.
Тем не менее, есть много рабочих мест, которые я бы не использовал для этого. Я бы очень осторожно использовал его для всего, что может повлиять на функциональность приложения. Дополнительный уровень косвенности и недостатка прозрачности может вызвать слишком много проблем для разработчиков, пытающихся добавить функции или исправить ошибки.