Какая лучшая реализация для AOP в .Net?[закрыто]

StackOverflow https://stackoverflow.com/questions/633710

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Вот несколько советов:

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top