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

Если вы используете ASP.NET MVC, тогда есть другой метод, который можно использовать для ситуации Post -> failure. .

Если вы реализуете этот метод, вы можете всегда ] перенаправлять после публикации, даже если сообщение вызвало сбой.

37
задан Charles Menguy 25 April 2012 в 18:48
поделиться

10 ответов

Да.

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

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

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

Много контейнеров внедрения зависимости, включая замок Windsor и Единицу, поддерживают это поведение или "в поле" или с помощью расширений.

13
ответ дан Brad Wilson 25 April 2012 в 18:48
поделиться
  • 1
    Вы видите какую-либо проблему с выполнением ignore.update(dct) до цикличного выполнения до dir() и так сжатие последнего два if операторы в один? Инструмент для очистки чувств мне, но возможно существует непреднамеренные последствия что я в моей неопытности haven' t ожидаемый. – Air 31 October 2013 в 00:00

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

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

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

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

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

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

19
ответ дан Eli Courtwright 25 April 2012 в 18:48
поделиться

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

1
ответ дан Chris Canal 25 April 2012 в 18:48
поделиться

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

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

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

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

3
ответ дан Matt McMinn 25 April 2012 в 18:48
поделиться

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

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

1
ответ дан Chris R 25 April 2012 в 18:48
поделиться
  • 1
    Я действительно читал это, но didn' t вполне grok это в первый раз. – Theodore Norvell 13 October 2012 в 02:48

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

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

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

1
ответ дан Brian Adams 25 April 2012 в 18:48
поделиться

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

4
ответ дан skaffman 25 April 2012 в 18:48
поделиться
  • 1
    С клиента.Net 4.5 профиль больше не будет доступен, так как они смогли уменьшить размер .net распространяемого файла платформы – Chris Klepeis 30 October 2013 в 18:03

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

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

9
ответ дан Dónal 25 April 2012 в 18:48
поделиться
  • 1
    Этот ответ на 100% корректен, ничего не объясняя и будучи абсолютно бесполезным. Извините. – Lennart Regebro 30 January 2012 в 07:01

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

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

1
ответ дан Yes - that Jake. 25 April 2012 в 18:48
поделиться
  • 1
    I' m, все еще ища ответ на часть (b). Что я могу сделать для фиксации его? – Theodore Norvell 13 October 2012 в 02:50

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

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

4
ответ дан Scott Bale 25 April 2012 в 18:48
поделиться
  • 1
    Старая шутка Bell Labs: пилот, потерянный в густом тумане, видит офисное здание, выкрикивает " где я? " получает ответ " в airplane" и приземляется в... Аллентаун. Как он знал? " ответ на 100% корректен..." – denis 20 April 2012 в 16:57
Другие вопросы по тегам:

Похожие вопросы: