Какая наилучшая реализация для АОП в .Net?

В C #, VB.net реализовано много реализации АОП. это некоторые из Реализации АОП:

  • PostSharp
  • LOOM.NET
  • Aspect.NET
  • Корпоративная библиотека 3.0. Блок приложений для инъекций
  • AspectDNG
  • DotSpect (.SPECT)
  • Spring.NET Framework как часть его функциональности
  • Викка и Phx.Morph
  • Подробный анализ решений AOSD для .NET доступен в Университете Твенте
  • Seasar.NET
  • аспект #
  • Puzzle.NAspect
  • Написать *
  • SetPoint
  • NConcern .NET AOP Framework

Какая наилучшая реализация для АОП в .Net? Что я должен использовать?

Я думаю, что Castle Dynamic Proxy – это решение, если динамический перехват может удовлетворить ваши потребности. Эта структура используется внутренне множеством других инфраструктур, которые хотят предлагать возможности AOP. Как правило, большинство существующих контейнеров IoC теперь предоставляют некоторые динамические механизмы перехвата (Spring.NET, Castle Windsor, StructureMap и т. Д.). Если вы уже работаете с контейнером IoC, возможно, было бы проще посмотреть на то, что он предлагает.

Если динамический перехват не может удовлетворить ваши потребности (сплетение закрытого classа, перехват не виртуального вызова и т. Д.), То вам, безусловно, нужно статическое ткачество. PostSharp является ссылкой в ​​этой области.

Обратите внимание, что он также существует Linfu , который может использоваться для использования обе стилей AOP.

«Лучшее» субъективно.

Во-первых, составите список необходимых функций, свою архитектуру и т. Д. Затем найдите варианты, которые делают то, что вам нужно, не вводя излишнюю сложность. Например, некоторые из них ориентированы на интерфейс: ваш код в настоящее время ориентирован на интерфейс? Если нет, PostSharp может быть лучшим выбором (сотканный в исходные classы). Но, конечно, PostSharp не может быть настроен во время выполнения … лошадей для курсов.

Лучший способ сделать аспектно-ориентированное программирование в .NET – это использование хорошо известных методов проектирования. Например, применяя принципы SOLID, вы можете достичь гибкости и модульности, что необходимо для того, чтобы добавить многоречивые проблемы. Если у вас есть право на дизайн, вы даже сможете применять большинство сквозных задач без каких-либо фреймворков. Ошибочно думать, что ООП не подходит для выполнения АОП.

Вот несколько указателей:

  • Не зависит от конкретных случаев, но зависит от абстракций.
  • Не смешивайте сквозные проблемы и бизнес-логику в одном classе.
  • Добавление межсекторальных проблем путем упаковки classов бизнес-логикой в ​​classы, которые реализуют эти проблемы ( декораторы ).
  • Найдите общие артефакты в своем дизайне и смоделируйте их одинаково, предпочтительно используя те же типы абстракций. Взгляните на это и это, например.

Когда у вас есть правильные абстракции на месте, добавление новых сквозных проблем в систему – это вопрос написания нового classа декоратора и обертывания его вокруг правильных реализаций. Если абстракции являются общими, вы можете обернуть один декоратор вокруг большой группы classов (именно это и есть АОП).

Хотя такие методы, как динамические прокси и кодовое переплетение, могут облегчить работу с плохо разработанным приложением, на самом деле нет никакой альтернативы хорошему дизайну. Рано или поздно вас сожгут. Это не означает, что динамическое создание прокси и кодовое ткачество не должны использоваться. Но без надлежащего дизайна приложения даже эти методы будут лишь незначительно полезными.

Я не знаю о лучшем, есть много фреймворков и недостаточно часов в день, чтобы попробовать их всех.

Я использовал PostSharp и был приятно удивлен, насколько легко начать с него.

Я также изучил АОП с Castle Windsor и Spring.Net, подход отличается (время выполнения и время компиляции). Смешивание AOP и IoC, кажется, имеет смысл. Когда вы не используете одну из этих фреймворков, вам нужно начать гораздо больше, но не позволяйте этому останавливать вас.

Для новых проектов теперь я бы, вероятно, использовал Castle Windsor, но это в основном потому, что я также хотел бы использовать IoC. Если бы мне пришлось быстро внедрить АОП в существующую базу кода, я бы использовал PostSharp.

Кроме того, Microsoft внедряет и внедряет Unity Interception .

  • Аспектно-ориентированное программирование (AOP) для C # (.Net) и их функций
  • Использование прокси в Spring AOP
  • Отслеживание причины «непригодности автопроксирования» Spring
  • Как перехватить вызов метода в C #?
  • Почему AspectJ не компилируется во время работы Spring @Configurable?
  • Давайте будем гением компьютера.