Что является лучшей реализацией для АОП in.Net? [закрыт]


существует много реализации AOP в C#, VB.net. это некоторые из реализаций AOP:

Что самое лучшее реализация для AOP в .Net? что я должен использовать?

5 75

5 ответов:

думаю, что Замок Динамический Прокси это решение выбора, если динамический перехват может справиться с вашими потребностями. Эта структура используется внутри многих других структур, которые хотят предложить возможности AOP. Как правило, большинство существующих контейнеров МОК теперь обеспечивают некоторые динамические механизмы перехвата (Spring.NET, замок Виндзор, StructureMap и др.) Если вы уже работаете с контейнером IoC, возможно, было бы проще посмотреть, что он предлагает.

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

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

"лучший" субъективно.

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

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

вот некоторые указатели:

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

когда у вас есть правильные абстракции, добавление новых сквозных проблем в систему-это всего лишь вопрос написания нового класса декоратора и обертывания его вокруг правильных реализаций. Если абстракции являются универсальными, вы можете обернуть один декоратор вокруг большой группы классов (что и есть AOP).

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

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

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

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

для новых проектов теперь я бы, вероятно, использовал замок Виндзор, но это в основном потому, что я также хотел бы использовать МОК. Если бы мне пришлось быстро реализовать AOP в существующую базу кода, я бы использовал PostSharp.

есть также инъекции политики и Перехват Единства из Microsoft.