АОП можно использовать для обмена данными между различными запущенными потоками в процессе приложения? - PullRequest
0 голосов
/ 16 сентября 2009

ОБНОВЛЕНИЕ: мне не ясно, в каком контексте следует использовать АОП? Поскольку мы можем использовать AOP для целей ведения журнала, безопасности (аутентификации), предложите несколько других сценариев, в которых мы можем использовать преимущества AOP.

Можно ли использовать AOP для обмена данными между различными запущенными потоками в процессе приложения?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2009

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

Итак, AOP действительно берет небольшие функциональные возможности и встраивает их во время выполнения или во время компиляции в ваш код, где присутствует «сквозная» функциональность.

Ресурсы

В настоящее время AOP не встроен в C #, но там могут быть построены следующие платформы:

AOP для данных потока

Как правило, использование AOP для обмена данными между потоками не является подходящим способом. Разработчикам доступны другие методы:

  • [ThreadStaticAttribute] Добавьте этот атрибут к полям, чтобы указать среде выполнения .NET, что следующее поле будет уникальным для нескольких потоков

  • Синхронизация (наиболее распространенный метод) Используйте Mutexes, Semaphores, ReaderWriter блокировки и EventWaitHandles для синхронизации доступа к локальным или глобальным данным из нескольких потоков. В C # оператор lock является синтаксическим сахаром для класса Monitor, который можно использовать для «блокировки» доступа к объекту из одного потока.

0 голосов
/ 21 сентября 2009

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

...