Я хотел бы сделать изображение того, что является возможными случаями для эффективного участия AOP в проектировании приложений. Все, что я встретил до сих пор:
Что-нибудь еще?
(Это не должен быть обязательно основанный на прокси AOP Spring - скорее JBoss AOP.)
Я могу привести два примера, в которых мы его используем:
Автоматическая регистрация объектов в JMX для удаленного управления. Если класс аннотирован нашей аннотацией @AutoRegister
, у нас есть аспект, который отслеживает новые экземпляры этого класса и автоматически регистрирует их в JMX.
Ведение журнала аудита (золотой стандарт использования АОП). Это немного грубо, но общий подход состоит в том, чтобы аннотировать методы, которые представляют некоторые проверяемые действия.В сочетании с чем-то вроде Spring Security мы можем получить довольно хорошее представление:
Чтобы увидеть охват АОП с точки зрения применимости, я действительно рекомендую вам прочитать книгу Aspect-Oriented-Software-Development-Use-Cases . В этой книге описаны варианты использования функциональных и нефункциональных требований с использованием АОП. После этого вы увидите, что аспекты могут использоваться для большего количества требований, чем ведение журнала, отслеживание, безопасность и т. Д.
Кэширование на уровне метода, если ваш метод не имеет состояния (я имею в виду, возвращает то же значение при повторном вызове с одинаковыми значениями параметров). Это более эффективно в случае методов DAO, поскольку позволяет избежать попадания в базу данных.
Порядок не имеет значения. Базовая реализация onDestroy () не делает ничего, кроме того, что вы его назвали. Некоторые производные классы (такие как ListActivity) могут что-то делать, но пока вы не попытаетесь использовать их состояние после вызова производного класса, вы будете в порядке.
-121--3690496-Используя защиту заголовка, например, это ускоряет процесс компиляции, представьте себе наличие трех исходных файлов, использующих заголовок (за вычетом защиты заголовка), что, в свою очередь, означает, что компилятору придется включать заголовок (разбор и лексирование синтаксиса) несколько раз.
При защите заголовка компилятор скажет 'Ha! Я видел это раньше, и нет я не буду анализировать/lex синтаксис "тем самым ускорить процесс компиляции.
Надеюсь, что это поможет, С уважением, Том.
-121--4132638-Одним из эффективных способов использования АОП, помимо всех перечисленных вами, может быть проверка. Проверка пользовательского ввода или бизнес-объектов.
Статьи по теме, на которые стоит обратить внимание.
Я также порекомендую аспекты для:
С помощью Spring и tcServer (разработчик) можно легко контролировать все ваши Spring бобы с помощью @Компонентная аннотация. Вы можете увидеть использованное время, входные и возвращаемые данные, включая исключения.
INotifyPropertyChanged и подобные ужасы.
В основном, везде, где есть код, который выглядит так - используйте аспект, и все готово.