2010-02-04 4 views
47

Я хотел бы сделать фотографию, какие возможные случаи для эффективного участия АОП в разработке приложений. Все, что я встречал до сих пор:Каковы возможные варианты использования АОП?

  • лесозаготовительной связанный
  • проверка безопасности
  • управления транзакциями
  • подстройки из унаследованного приложения

Что-нибудь еще?

(Это не должно быть обязательно в Spring прокси основе AOP - а JBoss AOP.)

(Related question)

+1

"Возможные случаи"? Это почти * бесконечная коллекция. Однако не все это хорошая идея. Положить все можно. Есть ли способ ограничить или сфокусировать этот вопрос? –

+1

Хорошо читайте: вопрос содержал «возможные случаи эффективного создания АОП в дизайне приложений». Под этим я подразумеваю случаи, когда рекомендуется использовать АОП. Извините, если вопрос непонятен. –

+0

Должно быть сообщество wiki – skaffman

ответ

25

Я могу дать вам два примера, где мы его используем:

  • Автоматическая регистрация объектов в JMX для удаленного управления. Если класс аннотируется аннотацией @AutoRegister, у нас есть аспект, который отслеживает новые экземпляры этого класса и автоматически регистрирует их в JMX.

  • Аудит регистрации (золотой вариант использования АОП). Его немного грубый, но общий подход заключается в том, чтобы комментировать методы, которые представляют собой какое-то проверяемое действие. В сочетании с чем-то вроде Spring Security, мы можем получить довольно хорошее представление о:

    • , который пользователь является
    • какой метод они вызова
    • , какие данные они предоставляют
    • какое время метод был вызван
    • был ли вызов успешным или нет (то есть, если было сгенерировано исключение)
4

Одно эффективное использование АОП, помимо всех перечисленных вами, может быть проверено. Проверка ввода пользователя или бизнес-объектов.

Публикации, на которые вы должны обратить внимание.

3

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

4
  • Замки для чтения/записи. Вместо того, чтобы копировать один и тот же фрагмент, я использовал аспект для определения методов, требующих блокировки чтения или исключительной блокировки.
7

Чтобы увидеть покрытие АОП с точки зрения применимости, я действительно рекомендую вам прочитать книгу Aspect-Oriented-Software-Development-Use-Cases.В этой книге рассматриваются варианты использования функциональных и нефункциональных требований с использованием АОП. После этого вы увидите, что аспекты могут быть использованы для более, чем требования регистрации, отслеживания, безопасности и т.д.

2
  • Exception Handling: не нужно повторять ужасный список Try ... Catch, поймать, поймать и т. д. - также означает, что обработка исключений гарантирована.
  • Мониторинг производительности: очень полезно, поскольку использование аспекта не является навязчивым и может быть выполнено после факта, а затем выключено, когда больше не требуется.
1

Я также рекомендую аспекты для:

  • метода асинхронного называет
  • Мониторингом

С весной и tcServer (разработчик), вы можете легко контролировать все ваши пружину боб с @ Компонентная аннотация. Вы можете видеть время, используемое, данные ввода и возврата, включая исключения.

1

INotifyPropertyChanged и подобные ужасы.

В основном везде, где есть код, который выглядит так: используйте аспект, и все готово.

3

Мы используем его для управления лицензиями на программное обеспечение, то есть разрешаем запуск программного обеспечения только в том случае, если на компьютере установлена ​​определенная лицензия. Это не так отличается от перечисленных вами видов использования, поскольку это форма проверки безопасности.

Я опубликовал запись в блоге, описывающее практической реализации here

1

проверки во время выполнения кода контрактов. Code Contracts for .NET использование АОП для

Проверка времени выполнения. Наш бинарный перезаписывающий модуль модифицирует программу путем ввода контрактов, которые проверяются как часть выполнения программы.

0

Мы используем AspectJ для выполнения АОП. Варианты использования, помимо указанных выше, следующие:

  • Ограничение доступа к вызовам метода только для нескольких классов.
  • Автоматически аннотирует выбранные методы/классы/поля.
Смежные вопросы