Что такое аспектно-ориентированное программирование?
Duplicate:
Что такое аспектно-ориентированное программирование?
Каждый раз, когда я здесь подкаст или читаю запись в блоге об этом, даже здесь, они заставляют его звучать как теория струн или что-то в этом роде. Является лучшим способом описать его ООП с инъекцией зависимостей на стероидах?
Каждый раз, когда кто-то пытается объяснить это, это похоже, Аспекты, [Взрослые из Мультфильма Арахиса], Ортогональные, [больше шума], проблемы с перекрестными проблемами и т.д. Серьезно, может ли кто-нибудь описать это в терминах простой.
Ответы
Ответ 1
Условия Laymans, поэтому позвольте мне привести пример. Скажем, у вас есть веб-приложение, и вам нужно добавить регистрацию ошибок/аудит. Одна из реализаций будет заключаться в каждом публичном методе и добавлении блоков try catch и т.д....
Well Aspect ориентируется на это с помощью hogwash, позвольте мне применить мой метод к вашему методу, например, вместо вызова YourClass.UpdateModel(), который может вызвать система,
LoggingHandler.CallMethod() этот метод затем может перенаправить вызов на UpdateModel, но обертывает его в блок catch try для обработки ошибок ведения журнала.
Теперь трюк заключается в том, что это перенаправление происходит автоматически, через конфигурацию или путем применения атрибутов к методам.
Это работает так, как вы сказали, перекрестные вещи, которые являются очень распространенными элементами программирования, которые существуют в каждом домене, такие как: Logging, Auditing, Transaction Mgmt, Authorization.
Идея заключается в том, чтобы удалить весь этот общий технический код из уровня вашего бизнеса/приложения, чтобы вы могли сосредоточиться на решении проблемы, не беспокоясь о регистрации этого вызова метода или вызова метода.
Ответ 2
Атрибуты класса и метода в .NET - это форма аспектно-ориентированного программирования. Вы украшаете свои классы/методы атрибутами. За кулисами это добавляет код вашему классу/методу, который выполняет определенные функции атрибута. Например, маркировка сериализуемого класса позволяет автоматически сериализоваться для хранения или передачи в другую систему. Другие атрибуты могут отмечать некоторые свойства как несериализуемые, и они будут автоматически опущены из сериализованного объекта. Сериализация - это аспект, реализованный другим кодом в системе и примененный к вашему классу с помощью атрибута "конфигурация" (оформление).
Ответ 3
AOP - это управление общей функциональностью (которая охватывает приложение, а значит и кросс-разрез) внутри приложения, так что она не встроена в бизнес-логику.
Примерами таких проблем с перекрестными связями являются регистрация, управление безопасностью, управление транзакциями и т.д.
Frameworks позволяет автоматически управлять этим с помощью некоторых файлов конфигурации.
Ответ 4
В настоящее время я использую Опубликовать Sharp, я бы прочитал информацию с их сайта. Я использую его для обеспечения безопасности при вызове метода.
"PostSharp - открытая платформа для анализа и трансформации сборников .NET. Он поставляется с PostSharp Laos, мощным, но простым подключаемым модулем, который позволяет вам разрабатывать пользовательские атрибуты, которые фактически добавляют поведение вашего кода. PostSharp Laos - это (AOP) для .NET Framework".
Ответ 5
Классическими примерами являются безопасность и ведение журнала. Вместо того, чтобы писать код в вашем приложении, чтобы регистрировать появление x или проверять объект z для контроля доступа к безопасности, существует языковое приспособление "вне диапазона" обычного кода, которое может систематически вводить безопасность или регистрироваться в подпрограммах, которые не имеют на них таким образом, что даже если ваш код не предоставляет его - его заботятся.
Более конкретный пример - это операционная система, обеспечивающая управление доступом к файлу. Программе не нужно проверять ограничения доступа, поскольку базовая система работает для нее.
Если вы считаете, что вам нужен AOP в моем опыте, вам действительно нужно инвестировать больше времени и усилий в соответствующее управление метаданными в вашей системе с уделением особого внимания хорошо продуманному структурному/системному дизайну.