Каковы функциональные различия между AspectJ и PostSharp? - PullRequest
3 голосов
/ 21 октября 2009

Кто-нибудь знает, чем отличаются функции AOP между AspectJ и PostSharp (да, я знаю, что они предназначены для разных языков и платформ)?

Я пытаюсь понять, какие вещи AspectJ позволил бы этому PostSharp, и наоборот.

Ответы [ 2 ]

4 голосов
/ 22 октября 2009

PostSharp 2.0 намного ближе к AspectJ, чем PostSharp 1.5. Сравнение PostSharp 1.5 с Spring AOP было оправданным, но больше не с PostSharp 2.0.

Однако в подходе все еще есть некоторые существенные различия.

  1. Подход к pointcuts радикально отличается. AspectJ предоставляет сложный язык pointcut. PostSharp предоставляет базовую декларативную систему pointcut , но позволяет разрабатывать императивные pointcut, чтобы вы могли писать код (обычно с использованием System.Reflection), который оценивает pointcut во время компиляции. Поэтому вместо языка pointcut PostSharp поддерживает простой C # или Linq.

  2. Действительно, нет условного pointcut (cflow).

  3. PostSharp поддерживает семантику высшего порядка, такую ​​как события и свойства. AspectJ, насколько мне известно, не (так как в Java нет ни одного события или свойства).

  4. Аспекты PostSharp обычно создаются и инициализируются во время сборки, затем сериализуются в сборку и десериализуются во время выполнения для выполнения. Это позволяет аспекту «инициализировать» во время сборки, поэтому производительность во время выполнения лучше. Он также позволяет выполнять произвольно сложную логику во время сборки (обычно инициализация, оценка точки среза, проверка точки соединения).

  5. PostSharp имеет реальную поддержку композиции аспектов, то есть вы можете применять несколько аспектов или советов к одной и той же точке соединения прогнозирующим образом. PostSharp разработан для сценария с несколькими поставщиками, когда поставщики с несколькими аспектами не знают друг о друге. Он имеет сложную систему зависимостей, где разработчики / поставщики аспектов могут указывать декларативно упорядочивающие ограничения, требования и конфликты.

Начиная с версии 2.0, PostSharp поставляется с инструментами IDE, которые частично покрывают функциональность «AJDT» для Eclipse.

2 голосов
/ 21 октября 2009

Из их документации PostSharp: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/Laos/AspectKinds/Overview.html

Поддерживаемые типы точек соединения: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/CoreLibrary/CodeWeaver/Overview.html

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

Похоже, что cflow, например, нельзя выполнить с помощью PostSharp.

Это похоже на Spring в том смысле, что это урезанная версия AOP для упрощения использования.

Обновление: хотя я не верю, что оно полностью обновлено, это хорошая идея относительно того, что поддерживает AspectJ: http://www.eclipse.org/aspectj/doc/released/progguide/index.html

...