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