Применение АОП - PullRequest
       38

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

13 голосов
/ 15 сентября 2008

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

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

Ответы [ 2 ]

14 голосов
/ 18 сентября 2008

Пара мелких проблем с PostSharp ...

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

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

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

10 голосов
/ 15 сентября 2008

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

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

Но ...

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

...