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

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

Да, АОП мне давно нравится, но в основном его применение сводится к «обслуживающему коду». Корневой функционал всегда пишется «жестко». Но гибкость парадигмы постоянно подмывает понаваять что то просто для красоты :)
АОП очень хорошо уживается вместе с ООП как раз в роли «декоратора», который внедряет изолированный объектный код в приложение.
Наверное я просто не принимал участие в достаточно крупных проектах что бы инъекция «сменной функциональности» имела смысл. Когда аспекты пишет тридцать человек и все они могут быть внедрены в точке, оно конечно да. В небольших проектах отладочных код и тестовый из размазанного состояния консолидировать в аспектах удобно, а вот внедрять корневой функционал аспектами в небольшом проекте слишком трудоемко по моему. Но может я просто не умею такое готовить :)
Могу в пример привести задачу включения в проекте метрик (Google Analytics, Fabric, etc.). Каждая аналитическая библиотека подключена и описана в отдельном Java-классе, а внедряется во множество точек приложения через аспектный класс :) Получается удобная структура и не надо искать по всему приложению или модулю эти срезы :) Подход такой же, как в случае написания провайдера, но исходное приложение полностью свободно от лишнего кода.
Так это ведь опять аналитика, то есть обслуживающий код.
Что очень удобно в AspectJ — это то, что pointcut можно цеплять на annotations
Таким образом код становится еще красивее
@ToLog
@ToAnalitics
private void sendOrder(Order order){
//TODO: anything
}

Но тут как в «Я — часть той силы, что вечно хочет зла и вечно совершает благо». Если использовать данный инструмент с умом, то все хорошо. Однако, можно превратить код в неведомую связку из спагетти. Когда на ваши функции накладываются дополнительные функции, смысл которых можно с трудом понять только по логам.

Кстати, вот видео, где очень доходчиво все объясняют про АОП
Меня всегда интересовало — зачем использовать гит как maven repo?
Есть же 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, но они не актуальны для этих репозиториев(.
Скажем так, быстро завести мавен не удалось, а долго ковыряться не было времени :)
За jitpack.io спасибо — обязательно гляну и займусь :)
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории