Как стать автором
Обновить

Комментарии 9

> Что такое аспекты и для чего их использовать прекрасно описано, например, на wiki.
Я бы не был столь категоричен
Посмотрите лекцию, на которую есть ссылка в конце поста — там довольно интересно об этом рассказывается.
Лекцию я в закладки добавил.
У меня есть сомнения в качестве пояснений на отсылаемую страницу вики.
А как у этой штуки на счет производительности, тестируемости и поддерживаемости?
Производительность: после компиляции java в class файлы, в них добавляется еще байткод из аспектов. Так что производительность не должна отличаться от того, как если бы вы код из аспекта написали прямо в методе, к которому этот аспект применяется.
Про тестируемость: опять же, в той же лекции говорится, что бы в аспектах не было много кода — весь код выносить в отдельные классы, к которым уже можно написать тесты.
Про поддержку: подозреваю, что аспекты могут очень сильно удивить человека, который в дальнейшем будет поддерживать этот код, поэтому применять их стоит очень осторожно.
А вот при дебаге человек увидит, что это прокся или интерфейс будет изначальным?
Извечный вопрос, зачем? Только тот кто не узрел во что превращает aspectJ байт-код java-программы, способен его использовать. Как насчет времени компиляции и финального размера вашего бинарника?
Время компиляции в Android Studio изменилось незаметно (учитывая, что gradle и так не особо быстр). Про размер бинарника: почему он должен увеличиться? И с ними и без на выходе получается одинаковый байткод (приблизительно), разница в организации java кода.
Зачем? Воспринимайте это как еще один инструмент, а как применять этот инструмент уже думайте сами.
Приведу пример того, что пришло мне в голову: в многопоточном приложении иногда, что бы отладить работу требуется вставить логи в каждый метод. Если таких методов пару десятков, то задача это не самая приятная, да и засоряет код. Используя аспекты можно это сделать быстро и просто) После того, как проблема решена достаточно удалить класс аспекта и код больше не будет засорен лишними вызовами логов.
Но ведь как раз для такой задачи хватает штатных средств IoC контейнера (я не имею в виду spring), ну или на худой конец есть аннотации. АОП выглядит простым на простых задачах, но эта простота быстро улетучивается(возьмите к примеру spring-roo).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории