2008-09-15 12 views
12

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

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

ответ

9

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

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

Но ...

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

14

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

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

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

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

+5

Это довольно старый ответ, который я наткнулся, но я просто хотел бы отметить, что PostSharp делает сейчас на самом деле преобразования PDB файлов, поэтому вопрос отладки не более (см: http://stackoverflow.com/questions/2006508/postsharp-pdb-debugging-and-referenced-assemblies) – 2013-10-28 02:06:28