АОП можно использовать для обмена данными между различными запущенными потоками в процессе приложения?
ОБНОВЛЕНИЕ: мне не ясно, в каком контексте АОП должен использоваться? Поскольку мы можем использовать AOP для целей ведения журнала, безопасности (аутентификации), предложите несколько других сценариев, в которых мы можем использовать преимущества AOP.
Можно ли использовать AOP для обмена данными между различными запущенными потоками в процессе приложения?
2 ответа
Аспектно-ориентированное программирование идеально, когда вам нужно уменьшить "сквозную" функциональность в вашей базе кода. Это означает, что у вас есть общий код (ведение журнала, безопасность), который должны реализовать классы, но вы не можете абстрагировать эту функциональность в базовые классы.
Итак, AOP действительно берет небольшие кусочки функциональности и встраивает их во время выполнения или во время компиляции в ваш код, где присутствует "сквозная" функциональность.
Ресурсы
В настоящее время AOP не встроен в C#, но следующие платформы могут создавать AOP:
АОП для данных потока
Как правило, использование AOP для обмена данными между потоками не является подходящим способом. Для этого есть другие методы, доступные разработчикам:
[ThreadStaticAttribute]
Добавьте этот атрибут к полям, чтобы указать среде выполнения.NET, что следующее поле будет уникальным для нескольких потоков.Синхронизация (наиболее распространенная техника) Использование
Mutexes
,Semaphores
,ReaderWriter
замки иEventWaitHandles
синхронизировать доступ к локальным или глобальным данным из нескольких потоков. В C#lock
утверждение является синтаксическим сахаром дляMonitor
класс, который можно использовать для "блокировки" доступа к объекту из одного потока.
Мне нравится думать о AOP как об умном закулисном генерировании кода (время компиляции) / выполнении (время выполнения), так что вы можете делать практически все. Он имеет все преимущества (и даже больше) традиционной генерации кода без недостатков (например, удобство сопровождения).