Аспекты в android

Кто такие эти аспекты?

Концеция аспектов относительна свежая в мире программирования, так что не удивительно, если ты про них раньше не слышал. АОП (аспектно-ориентированное программирование) хорошо ложится на определённый класс задач. В примерах обычно приводят логгирование в разных его проявлениях. Помнишь рулы в junit? Штука удобная, но заточена исключельно под тесты. Аспекты же являются реализацией этой идеи для произвольного кода. Т.е. можно взять и буквально в пару строчек встроить логгирование во ВСЕ методы твоего приложения.

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

Почему в android?

Хотя аспекты не очень распространены даже в “традиционной” java, кое-какая информация по ним всё-таки есть. Можно посмотреть лекцию на Youtube или почитать документацию к maven-aspectj-plugin.

В разработке же под андроид очень трепетно относятся к производительности, поэтому “нельзя просто так взять и встроить логгирование во ВСЕ методы твоего приложения”, а нужно сделать это оптимально. Я думаю что это основная причина, почему аспектами там практически не пользуются (но я могу ошибаться).

Какие есть решения?

Я накопал 2 gradle-плагина, которые делают примерно одно и то же - инкапсулируют настройки компилятора для работы c библиотекой aspectj. Первый от коллеги из Яндекса - GradleAspectJ-Android и второй от каких-то Японцев - gradle-android-aspectj-plugin. Второй мне понравился больше, потому что не требует вообще никакой настройки. Еще он с полпинка заработал в конфигурации когда аспекты находятся в отдельном модуле.

comments powered by Disqus