Сведения о вопросе

FUTER

17:58, 13th August, 2020

Теги

aop   paradigms    

Используете ли вы AOP (аспектно-ориентированное программирование) в производственном программном обеспечении?

Просмотров: 434   Ответов: 11

AOP -это интересная парадигма программирования, на мой взгляд. Однако здесь, на stackoverflow, об этом еще не было разговоров (по крайней мере, я не смог их найти). Что вы вообще об этом думаете? Вы используете AOP в своих проектах? Или вы думаете, что это скорее нишевая технология, которая не будет существовать в течение длительного времени или не войдет в мейнстрим (как OOP, по крайней мере, в теории ;))?

Если вы используете AOP, пожалуйста, сообщите нам, какие инструменты вы также используете. Спасибо!



  Сведения об ответе

ЯЯ__4

21:06, 1st October, 2020

Python поддерживает AOP, позволяя динамически изменять его классы во время выполнения (что в Python обычно называется monkeypatching, а не AOP). Вот некоторые из моих AOP вариантов использования:

  1. У меня есть сайт, на котором каждая страница генерируется функцией Python. Я бы хотел взять класс и сделать все веб-страницы, созданные этим классом, защищенными паролем. AOP приходит на помощь; перед вызовом каждой функции я делаю соответствующую проверку сеанса и перенаправляю ее, если это необходимо.

  2. Я хотел бы сделать некоторые записи и профилирование на кучу функций в моей программе во время ее фактического использования. AOP позволяет мне вычислять время и печатать данные в файлы журналов, фактически не изменяя ни одну из этих функций.

  3. У меня есть модуль или класс, полный функций non-thread-safe, и я обнаружил, что использую его в каком-то многопоточном коде. Некоторые AOP добавляют блокировку вокруг этих вызовов функций, не заходя в библиотеку и ничего не меняя.

Такого рода вещи возникают не очень часто, но всякий раз, когда это происходит, обезьяноподобие VERY полезно. Python также имеет декораторов, которые реализуют шаблон дизайна декоратора (http://en.wikipedia.org/wiki/Decorator_pattern) для выполнения аналогичных вещей.

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


  Сведения об ответе

SKY

18:19, 4th August, 2020

Да.

Ортогональные проблемы, такие как безопасность, лучше всего решаются с помощью перехвата в стиле AOP. Будет ли это сделано автоматически (через что-то вроде контейнера для инъекций зависимостей) или вручную, не имеет значения для конечной цели.

Один пример: атрибуты "before/after" в xUnit.net (проект с открытым исходным кодом, который я запускаю) являются формой перехвата метода в стиле AOP. Вы украшаете свои методы тестирования этими атрибутами, и непосредственно перед и после выполнения этого метода тестирования вызывается ваш код. Он может быть использован для таких вещей, как настройка базы данных и откат результатов, изменение контекста безопасности, в котором выполняется тест, и т.д.

Другой пример: атрибуты фильтра в ASP.NET MVC также действуют как специализированные перехватчики методов в стиле AOP. Один из них, например, позволяет вам сказать, как следует лечить необработанные ошибки, если они происходят в вашем методе действий.

Многие контейнеры внедрения зависимостей, включая Castle Windsor и Unity, поддерживают это поведение либо с помощью "in the box", либо с помощью расширений.


  Сведения об ответе

pumpa

15:10, 14th August, 2020

Я не понимаю, как можно справиться с такими сквозными проблемами, как ведение журнала, безопасность, управление транзакциями, обработка исключений в чистом виде без использования AOP.

Любой, кто использует фреймворк Spring (вероятно, около 50% из Java корпоративных разработчиков), использует AOP, знают они об этом или нет.


  Сведения об ответе

dump

05:31, 29th August, 2020

В Terracotta мы довольно широко используем инструменты AOP и байт-кода для интеграции с программным обеспечением сторонних производителей и инструментального обеспечения. Например, наша интеграция Spring выполняется в значительной степени с помощью aspectwerkz . В двух словах, нам нужно перехватить звонки на Spring beans и бобовые фабрики в различных точках, чтобы сгруппировать их.

Таким образом, AOP может быть полезен для интеграции со сторонним кодом, который в противном случае не может быть изменен. Однако мы обнаружили, что существует огромная ловушка - если это возможно, используйте только сторонний public API в ваших точках соединения, иначе вы рискуете получить свой код, нарушенный изменением на какой-то частный метод в следующем незначительном выпуске, и это станет кошмаром обслуживания.


  Сведения об ответе

VERSUION

21:06, 1st October, 2020

AOP а демаркация сделки-это брак, заключенный на небесах. Мы используем Spring AOP @Transaction аннотаций, это делает более простой и интуитивно понятный tx-демаркацию, чем я когда-либо видел где-либо еще.


  Сведения об ответе

pumpa

11:51, 1st August, 2020

Мы довольно долго использовали aspectJ в одном из моих больших проектов. Проект состоял из нескольких веб-сервисов, каждый из которых имел несколько функций, что было передним концом для сложной системы обработки документов/запросов. Где-то около 75 тысяч строк кода. Мы использовали аспекты для двух относительно незначительных частей функциональности.

Во-первых, это отслеживание потока приложений. Мы создали аспект, который выполнялся до и после каждого вызова функции, чтобы распечатать "Enter 'function'"и" exited 'function'". С помощью функции селектора вещь (pointcut может быть? Я не помню правильное название) мы смогли использовать это как инструмент отладки, выбирая только те функции, которые мы хотели trace в данный момент времени. Это было действительно хорошее использование аспектов в нашем проекте.

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

Я читал о некоторых хороших решениях, которые аспекты могут принести на стол, но я все еще не убежден, что они действительно могут сделать что-то, что вы не могли бы сделать (возможно, лучше) с технологией "normal". Например, я не мог придумать ни одной важной функции или функциональности, в которой нуждался бы любой из наших проектов, что не могло бы быть сделано так же легко без аспектов - там, где я нашел аспекты полезными, есть такие незначительные вещи, о которых я упоминал.


  Сведения об ответе

lesha

19:15, 15th August, 2020

Я часто использую AOP в своих приложениях C#. Я не большой поклонник использования атрибутов, поэтому я использовал Castle DynamicProxy и Boo для применения аспектов во время выполнения, не загрязняя свой код


  Сведения об ответе

nYU

10:45, 1st August, 2020

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

Мы также используем и планируем использовать значительное количество атрибутов для таких вещей, как управление компилятором, управление потоком и отладка in-IDE, которые не должны быть частью конечного распределенного приложения.


  Сведения об ответе

PAGE

06:36, 11th August, 2020

Мы используем PostSharp для нашего решения AOP. У нас есть кэширование, обработка ошибок и повторные попытки базы данных, которые мы в настоящее время используем и находимся в процессе превращения наших проверок безопасности в аспект.

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

Библиотека PostSharp - это пост-компилятор, который выполняет инъекцию кода. У него есть библиотека предопределенных перехватов, которые легко реализовать в мозге. Это похоже на проводку в обработчиках событий.


  Сведения об ответе

$DOLLAR

23:53, 19th August, 2020

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

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


  Сведения об ответе

#hash

14:37, 10th August, 2020

Да, мы действительно используем AOP в прикладном программировании . Я предпочитаю использовать AspectJ для интеграции aop в мои Spring приложения. Взгляните на эту статью, чтобы получить более широкую перспективу для того же самого.

http://codemodeweb.blogspot.in/2018/03/spring-aop-and-aspectj-framework.html


Ответить на вопрос

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