Подтвердить что ты не робот

Каковы возможные варианты использования АОП?

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

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

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

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

(Связанный вопрос)

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

Статьи по теме, на которые вы должны обратить внимание.

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

  • Обработка исключений: не нужно повторять ужасный список try... catch, catch, catch и т.д. - также означает, что обработка исключений гарантирована.
  • Мониторинг производительности: очень полезно, поскольку использование аспекта не является навязчивым и может быть выполнено после факта, а затем выключено, когда больше не требуется.

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

Проверка времени выполнения кодовых контрактов. Кодовые контракты для .NET используют AOP для

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

Ответ 11

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

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