Comments 9
> Что такое аспекты и для чего их использовать прекрасно описано, например, на wiki.
Я бы не был столь категоричен
Я бы не был столь категоричен
+1
А как у этой штуки на счет производительности, тестируемости и поддерживаемости?
0
Производительность: после компиляции java в class файлы, в них добавляется еще байткод из аспектов. Так что производительность не должна отличаться от того, как если бы вы код из аспекта написали прямо в методе, к которому этот аспект применяется.
Про тестируемость: опять же, в той же лекции говорится, что бы в аспектах не было много кода — весь код выносить в отдельные классы, к которым уже можно написать тесты.
Про поддержку: подозреваю, что аспекты могут очень сильно удивить человека, который в дальнейшем будет поддерживать этот код, поэтому применять их стоит очень осторожно.
Про тестируемость: опять же, в той же лекции говорится, что бы в аспектах не было много кода — весь код выносить в отдельные классы, к которым уже можно написать тесты.
Про поддержку: подозреваю, что аспекты могут очень сильно удивить человека, который в дальнейшем будет поддерживать этот код, поэтому применять их стоит очень осторожно.
0
Извечный вопрос, зачем? Только тот кто не узрел во что превращает aspectJ байт-код java-программы, способен его использовать. Как насчет времени компиляции и финального размера вашего бинарника?
0
Время компиляции в Android Studio изменилось незаметно (учитывая, что gradle и так не особо быстр). Про размер бинарника: почему он должен увеличиться? И с ними и без на выходе получается одинаковый байткод (приблизительно), разница в организации java кода.
Зачем? Воспринимайте это как еще один инструмент, а как применять этот инструмент уже думайте сами.
Приведу пример того, что пришло мне в голову: в многопоточном приложении иногда, что бы отладить работу требуется вставить логи в каждый метод. Если таких методов пару десятков, то задача это не самая приятная, да и засоряет код. Используя аспекты можно это сделать быстро и просто) После того, как проблема решена достаточно удалить класс аспекта и код больше не будет засорен лишними вызовами логов.
Зачем? Воспринимайте это как еще один инструмент, а как применять этот инструмент уже думайте сами.
Приведу пример того, что пришло мне в голову: в многопоточном приложении иногда, что бы отладить работу требуется вставить логи в каждый метод. Если таких методов пару десятков, то задача это не самая приятная, да и засоряет код. Используя аспекты можно это сделать быстро и просто) После того, как проблема решена достаточно удалить класс аспекта и код больше не будет засорен лишними вызовами логов.
0
Sign up to leave a comment.
Аспектно ориентированное программирование в Android