Что является лучшей реализацией для АОП in.Net? [закрыт]
существует много реализации AOP в C#, VB.net. это некоторые из реализаций AOP:
- PostSharp
- LOOM.NET
- Aspect.NET
- Enterprise Library 3.0 Policy Injection Application Block
- AspectDNG
- DotSpect (.SPECT)
- The Spring.NET фреймворк как часть его функциональность
- Викка и Phx.Морф
- исчерпывающий анализ решений AOSD для .NET доступен в Twente University
- Seasar.NET
- аспект#
- головоломка.NAspect
- Compose*
- SetPoint
- Nconcern .NET AOP Framework
- ...
Что самое лучшее реализация для AOP в .Net? что я должен использовать?
5 ответов:
думаю, что Замок Динамический Прокси это решение выбора, если динамический перехват может справиться с вашими потребностями. Эта структура используется внутри многих других структур, которые хотят предложить возможности AOP. Как правило, большинство существующих контейнеров МОК теперь обеспечивают некоторые динамические механизмы перехвата (Spring.NET, замок Виндзор, StructureMap и др.) Если вы уже работаете с контейнером IoC, возможно, было бы проще посмотреть, что он предлагает.
Если динамический перехват не может удовлетворить ваши потребности (плетение запечатанного класса, перехват невиртуального вызова и т. д.), то вы, конечно, хотите статического плетения. PostSharp является ссылкой в этом домене.
обратите внимание, что он также существует Linfu, который может быть использован для использования обоих AOP моды.
"лучший" субъективно.
во-первых, составьте список необходимых вам функций, вашей архитектуры и т. д. Тогда ищите варианты, которые делают то, что вам нужно, не вводя лишних сложностей. Например, несколько ориентированы на интерфейс: ваш код в настоящее время ориентированный интерфейс? Если нет, то PostSharp может быть лучшим выбором (будучи вплетенным в исходные классы). Но, конечно, PostSharp не может быть настроен во время выполнения... лошади для курсов.
лучший способ сделать аспектно-ориентированное программирование в .NET-это использовать хорошо известные методы проектирования. Например, применяя твердые принципы вы можете достигнуть гибкости и модульности вам нужно позволить добавить сквозные заботы. Если у вас есть дизайн, вы даже сможете применять наиболее сложные задачи без каких-либо рамок. Ошибочно думать, что ООП не подходит для выполнения АОП.
вот некоторые указатели:
- не зависят от конкретных примеров, а зависят от абстракций.
- Не смешивайте сквозные проблемы и бизнес-логику в одном классе.
- добавление сквозных проблем путем переноса классов с бизнес-логикой в классы, реализующие эти проблемы (декораторы).
- найдите общие артефакты в своем дизайне и моделируйте их одинаково, предпочтительно используя один и тот же тип абстракций. Взгляните на этой и этой например.
когда у вас есть правильные абстракции, добавление новых сквозных проблем в систему-это всего лишь вопрос написания нового класса декоратора и обертывания его вокруг правильных реализаций. Если абстракции являются универсальными, вы можете обернуть один декоратор вокруг большой группы классов (что и есть AOP).
хотя такие методы, как динамические прокси и ткачество кода может облегчить работу с плохо разработанным приложением, действительно нет альтернативы хорошему дизайну. Рано или поздно вы обожжетесь. Это не означает, что динамическая генерация прокси и кодовое плетение не должны использоваться. Но без надлежащего дизайна приложения даже эти методы будут лишь незначительно полезны.
Я не знаю о best, есть много рамок и не хватает часов в день, чтобы попробовать их все.
Я использовал PostSharp и был приятно удивлен, насколько легко начать с него.
Я также заглянул в AOP с замком Виндзор и Spring.Net, подход отличается (время выполнения и время компиляции). Смешивание АОП и МОК, кажется, имеет смысл. Когда вы не используете один из этих рамок, но это намного больше работы, чтобы начать, но не позволяйте этому остановить вы.
для новых проектов теперь я бы, вероятно, использовал замок Виндзор, но это в основном потому, что я также хотел бы использовать МОК. Если бы мне пришлось быстро реализовать AOP в существующую базу кода, я бы использовал PostSharp.
есть также инъекции политики и Перехват Единства из Microsoft.