Подтвердить что ты не робот

Что такое аспектно-ориентированное программирование?

Duplicate:

Что такое аспектно-ориентированное программирование?

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

Каждый раз, когда кто-то пытается объяснить это, это похоже, Аспекты, [Взрослые из Мультфильма Арахиса], Ортогональные, [больше шума], проблемы с перекрестными проблемами и т.д. Серьезно, может ли кто-нибудь описать это в терминах простой.

4b9b3361

Ответ 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 в моем опыте, вам действительно нужно инвестировать больше времени и усилий в соответствующее управление метаданными в вашей системе с уделением особого внимания хорошо продуманному структурному/системному дизайну.