Применение АОП

Я использовал некоторые базовые решения для AOP для сквозных задач, таких как безопасность, ведение журнала, проверка и т.д. Мое решение было связано с Castle Windsor и DynamicProxy. Я пошел по этому маршруту, потому что я могу применить все, используя DSL на основе Boo, и сохранить мой код в чистоте от атрибутов. Мне сказали в выходные, чтобы посмотреть PostSharp, поскольку оно должно быть "лучшим" решением. Я быстро посмотрел на PostSharp, но я был отстранен от использования атрибута.

Кто-нибудь пробовал оба решения и хотел бы поделиться своим опытом?

Ответ 1

Я смотрел на замок-виндзор на короткое время (пока), поэтому я не могу прокомментировать это, но я использовал postharp.

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

Но...

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

Ответ 2

Пара незначительных проблем с PostSharp...

Одной из проблем, с которыми я столкнулся с PostSharp, является то, что при использовании asp.net номера строк для сообщений об исключениях "выходят" по количеству инструкций IL, введенных в asssemblies PostSharp, поскольку PDB также не вводятся:).

Кроме того, без сборок PostSharp, доступных во время выполнения, возникают ошибки времени выполнения. Используя Windsor, перекрестные сокращения можно отключить позже, без перекомпиляции кода.

(надеюсь, это имеет смысл)