Комментарии 9
Респект, Эдуард, за популяризацию AOP на мобильной платформе! Интересная статья!
Про AOP в серверных приложениях
может кому будет полезно
Про AOP в серверных приложениях
рассказывал тут
- Модификация программы и что лучше менять: исполняемый код или AST программы?
- Диагностируем причину, выживаем в JAR hell: не дышим серой и не варимся в котле
- Публикация логов в Elasticsearch — жизнь без регулярных выражений и без logstash
- Протоколирование JDBC запросов и их параметров в существующем приложении
- Хабр шелл: встраиваем кросплатформенный ssh server в java приложение
- Внедрение веб консолей в jvm процесс на примере SonarQube
- Доклад: «Аспектно-ориентированное программирование в распределенных системах для java разработчиков и QA»
- Напильники бывают разные или повествование про «напильник» для java программ
может кому будет полезно
0
Да, АОП мне давно нравится, но в основном его применение сводится к «обслуживающему коду». Корневой функционал всегда пишется «жестко». Но гибкость парадигмы постоянно подмывает понаваять что то просто для красоты :)
0
АОП очень хорошо уживается вместе с ООП как раз в роли «декоратора», который внедряет изолированный объектный код в приложение.
0
Наверное я просто не принимал участие в достаточно крупных проектах что бы инъекция «сменной функциональности» имела смысл. Когда аспекты пишет тридцать человек и все они могут быть внедрены в точке, оно конечно да. В небольших проектах отладочных код и тестовый из размазанного состояния консолидировать в аспектах удобно, а вот внедрять корневой функционал аспектами в небольшом проекте слишком трудоемко по моему. Но может я просто не умею такое готовить :)
0
Могу в пример привести задачу включения в проекте метрик (Google Analytics, Fabric, etc.). Каждая аналитическая библиотека подключена и описана в отдельном Java-классе, а внедряется во множество точек приложения через аспектный класс :) Получается удобная структура и не надо искать по всему приложению или модулю эти срезы :) Подход такой же, как в случае написания провайдера, но исходное приложение полностью свободно от лишнего кода.
+1
Что очень удобно в AspectJ — это то, что pointcut можно цеплять на annotations
Таким образом код становится еще красивее
Но тут как в «Я — часть той силы, что вечно хочет зла и вечно совершает благо». Если использовать данный инструмент с умом, то все хорошо. Однако, можно превратить код в неведомую связку из спагетти. Когда на ваши функции накладываются дополнительные функции, смысл которых можно с трудом понять только по логам.
Кстати, вот видео, где очень доходчиво все объясняют про АОП
Таким образом код становится еще красивее
@ToLog
@ToAnalitics
private void sendOrder(Order order){
//TODO: anything
}
Но тут как в «Я — часть той силы, что вечно хочет зла и вечно совершает благо». Если использовать данный инструмент с умом, то все хорошо. Однако, можно превратить код в неведомую связку из спагетти. Когда на ваши функции накладываются дополнительные функции, смысл которых можно с трудом понять только по логам.
Кстати, вот видео, где очень доходчиво все объясняют про АОП
0
Меня всегда интересовало — зачем использовать гит как maven repo?
Есть же jcenter.
Для особо ленивых есть мой любимый — jitpack.io
"-SNAPSHOT" конечно можно заменить на github release tag, но они не актуальны для этих репозиториев(.
Есть же jcenter.
Для особо ленивых есть мой любимый — jitpack.io
Для вашей реализации
buildscript {
repositories {
mavenCentral()
maven { "https://jitpack.io"}
}
dependencies {
//retrolambda
classpath 'me.tatarka:gradle-retrolambda:3.2.3'
//aspectj
classpath classpath 'com.github.Archinamon:GradleAspectJ-Android:-SNAPSHOT'
}
}
// Required because retrolambda is on maven central
repositories {
mavenCentral()
}
apply plugin: 'com.android.application' //or apply plugin: 'com.android.library'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'com.archinamon.aspectj'
dependencies {
compile 'com.github.Archinamon:RetroStream:-SNAPSHOT'
}
"-SNAPSHOT" конечно можно заменить на github release tag, но они не актуальны для этих репозиториев(.
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Внедрение AspectJ в Android-приложение