Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Используете ли вы AOP (аспектно-ориентированное программирование) в производственном программном обеспечении?
AOP -это интересная парадигма программирования, на мой взгляд. Однако здесь, на stackoverflow, об этом еще не было разговоров (по крайней мере, я не смог их найти). Что вы вообще об этом думаете? Вы используете AOP в своих проектах? Или вы думаете, что это скорее нишевая технология, которая не будет существовать в течение длительного времени или не войдет в мейнстрим (как OOP, по крайней мере, в теории ;))?
Если вы используете AOP, пожалуйста, сообщите нам, какие инструменты вы также используете. Спасибо!
Python поддерживает AOP, позволяя динамически изменять его классы во время выполнения (что в Python обычно называется monkeypatching, а не AOP). Вот некоторые из моих AOP вариантов использования:
У меня есть сайт, на котором каждая страница генерируется функцией Python. Я бы хотел взять класс и сделать все веб-страницы, созданные этим классом, защищенными паролем. AOP приходит на помощь; перед вызовом каждой функции я делаю соответствующую проверку сеанса и перенаправляю ее, если это необходимо.
Я хотел бы сделать некоторые записи и профилирование на кучу функций в моей программе во время ее фактического использования. AOP позволяет мне вычислять время и печатать данные в файлы журналов, фактически не изменяя ни одну из этих функций.
У меня есть модуль или класс, полный функций non-thread-safe, и я обнаружил, что использую его в каком-то многопоточном коде. Некоторые AOP добавляют блокировку вокруг этих вызовов функций, не заходя в библиотеку и ничего не меняя.
Такого рода вещи возникают не очень часто, но всякий раз, когда это происходит, обезьяноподобие VERY полезно. Python также имеет декораторов, которые реализуют шаблон дизайна декоратора (http://en.wikipedia.org/wiki/Decorator_pattern) для выполнения аналогичных вещей.
Обратите внимание, что динамическое изменение классов также может позволить вам работать с ошибками или добавлять функции в стороннюю библиотеку, не изменяя ее на самом деле. Мне почти никогда не нужно это делать, но несколько раз это было невероятно полезно.
Да.
Ортогональные проблемы, такие как безопасность, лучше всего решаются с помощью перехвата в стиле AOP. Будет ли это сделано автоматически (через что-то вроде контейнера для инъекций зависимостей) или вручную, не имеет значения для конечной цели.
Один пример: атрибуты "before/after" в xUnit.net (проект с открытым исходным кодом, который я запускаю) являются формой перехвата метода в стиле AOP. Вы украшаете свои методы тестирования этими атрибутами, и непосредственно перед и после выполнения этого метода тестирования вызывается ваш код. Он может быть использован для таких вещей, как настройка базы данных и откат результатов, изменение контекста безопасности, в котором выполняется тест, и т.д.
Другой пример: атрибуты фильтра в ASP.NET MVC также действуют как специализированные перехватчики методов в стиле AOP. Один из них, например, позволяет вам сказать, как следует лечить необработанные ошибки, если они происходят в вашем методе действий.
Многие контейнеры внедрения зависимостей, включая Castle Windsor и Unity, поддерживают это поведение либо с помощью "in the box", либо с помощью расширений.
Я не понимаю, как можно справиться с такими сквозными проблемами, как ведение журнала, безопасность, управление транзакциями, обработка исключений в чистом виде без использования AOP.
Любой, кто использует фреймворк Spring (вероятно, около 50% из Java корпоративных разработчиков), использует AOP, знают они об этом или нет.
В Terracotta мы довольно широко используем инструменты AOP и байт-кода для интеграции с программным обеспечением сторонних производителей и инструментального обеспечения. Например, наша интеграция Spring выполняется в значительной степени с помощью aspectwerkz . В двух словах, нам нужно перехватить звонки на Spring beans и бобовые фабрики в различных точках, чтобы сгруппировать их.
Таким образом, AOP может быть полезен для интеграции со сторонним кодом, который в противном случае не может быть изменен. Однако мы обнаружили, что существует огромная ловушка - если это возможно, используйте только сторонний public API в ваших точках соединения, иначе вы рискуете получить свой код, нарушенный изменением на какой-то частный метод в следующем незначительном выпуске, и это станет кошмаром обслуживания.
Мы довольно долго использовали aspectJ в одном из моих больших проектов. Проект состоял из нескольких веб-сервисов, каждый из которых имел несколько функций, что было передним концом для сложной системы обработки документов/запросов. Где-то около 75 тысяч строк кода. Мы использовали аспекты для двух относительно незначительных частей функциональности.
Во-первых, это отслеживание потока приложений. Мы создали аспект, который выполнялся до и после каждого вызова функции, чтобы распечатать "Enter 'function'"и" exited 'function'". С помощью функции селектора вещь (pointcut может быть? Я не помню правильное название) мы смогли использовать это как инструмент отладки, выбирая только те функции, которые мы хотели trace в данный момент времени. Это было действительно хорошее использование аспектов в нашем проекте.
Второе, что мы сделали, - это применили конкретные показатели. Мы ставим аспекты вокруг наших методов веб-сервиса, чтобы захватить время, информацию об объекте и т.д. и сбросьте результаты в базу данных. Это было хорошо, потому что мы могли захватить эту информацию, но все же сохранить весь этот код захвата отдельно от кода "real", который выполнял эту работу.
Я читал о некоторых хороших решениях, которые аспекты могут принести на стол, но я все еще не убежден, что они действительно могут сделать что-то, что вы не могли бы сделать (возможно, лучше) с технологией "normal". Например, я не мог придумать ни одной важной функции или функциональности, в которой нуждался бы любой из наших проектов, что не могло бы быть сделано так же легко без аспектов - там, где я нашел аспекты полезными, есть такие незначительные вещи, о которых я упоминал.
Основное приложение, над которым я работаю, включает в себя узел сценариев. AOP позволяет хосту изучить свойства скрипта, прежде чем принимать решение о том, следует ли загружать скрипт в домен приложения. Поскольку некоторые скрипты довольно громоздки, это позволяет значительно ускорить загрузку во время выполнения.
Мы также используем и планируем использовать значительное количество атрибутов для таких вещей, как управление компилятором, управление потоком и отладка in-IDE, которые не должны быть частью конечного распределенного приложения.
Мы используем PostSharp для нашего решения AOP. У нас есть кэширование, обработка ошибок и повторные попытки базы данных, которые мы в настоящее время используем и находимся в процессе превращения наших проверок безопасности в аспект.
Отлично работает для нас. Разработчики действительно любят разделение забот. Архитекторам очень нравится, когда логика уровня платформы консолидируется в одном месте.
Библиотека PostSharp - это пост-компилятор, который выполняет инъекцию кода. У него есть библиотека предопределенных перехватов, которые легко реализовать в мозге. Это похоже на проводку в обработчиках событий.
Мы используем AOP в нашем фасаде сессии, чтобы обеспечить последовательную структуру для наших клиентов, чтобы настроить наше приложение. Это позволяет нам выставить одну точку настройки без необходимости добавлять ручную поддержку крюка для каждого метода.
Кроме того, AOP предоставляет единую точку конфигурации для дополнительной настройки транзакции и демонтажа, а также обычных вещей ведения журнала. Все сказанное, гораздо более ремонтопригодно, чем делать все это вручную.
Да, мы действительно используем AOP в прикладном программировании . Я предпочитаю использовать AspectJ для интеграции aop в мои Spring приложения. Взгляните на эту статью, чтобы получить более широкую перспективу для того же самого.
http://codemodeweb.blogspot.in/2018/03/spring-aop-and-aspectj-framework.html