Pregunta

¿Alguien sabe qué características de AOP son diferentes entre AspectJ y PostSharp (sí, sé que son para diferentes idiomas y plataformas)?

Estoy tratando de entender qué tipo de cosas permitiría AspectJ que PostSharp no, y viceversa.

¿Fue útil?

Solución

PostSharp 2.0 está mucho más cerca de AspectJ que PostSharp 1.5. La comparación de PostSharp 1.5 con Spring AOP estaba justificada, pero ya no lo es con PostSharp 2.0.

Sin embargo, todavía hay algunas diferencias importantes en el enfoque.

  1. El enfoque de los puntos de corte es radicalmente diferente. AspectJ proporciona un lenguaje de corte de puntos complejo. PostSharp proporciona un sistema de corte de punto declarativo básico pero le permite desarrollar cortes de punto imperativos, para que pueda escribir código (generalmente usando System.Reflection) que evalúa el corte de punto en tiempo de compilación. Entonces, en lugar de tener un lenguaje de corte de puntos, PostSharp es compatible con C # o Linq.

  2. De hecho, no hay un punto de corte condicional (cflow).

  3. PostSharp admite semántica de orden superior, como eventos y propiedades. AspectJ, que yo sepa, no lo hace (ya que no hay ningún evento o propiedad en Java afaik).

  4. Los aspectos de PostSharp generalmente se instancian e inicializan en el momento de la compilación, luego se serializan en el ensamblado y se deserializan en tiempo de ejecución para ejecutarse. Esto permite que el aspecto "inicialice" en tiempo de compilación, por lo que el rendimiento en tiempo de ejecución es mejor. También permite ejecutar una lógica compleja arbitraria en el momento de la compilación (generalmente inicialización, evaluación de corte de punto, validación de punto de unión).

  5. PostSharp tiene soporte real para la composición de aspectos, es decir, puede aplicar múltiples aspectos o consejos al mismo punto de unión de forma predictiva. PostSharp está diseñado para un escenario de múltiples proveedores, donde los proveedores de múltiples aspectos no se conocen entre sí. Tiene un sistema complejo de dependencias, donde los desarrolladores / vendedores de aspectos pueden especificar restricciones, requisitos y conflictos para ordenar declarativamente.

Desde la versión 2.0, PostSharp viene con herramientas IDE que cubren en parte la funcionalidad de "AJDT" para Eclipse.

Otros consejos

De su documentación de PostSharp: http://doc.postsharp.org/ 1.5 / ## PostSharp.HxS / UserGuide / Laos / AspectKinds / Overview.html

Tipos admitidos de puntos de unión: http://doc.postsharp.org/ 1.5 / ## PostSharp.HxS / UserGuide / CoreLibrary / CodeWeaver / Overview.html

AspectJ ofrece mucha más flexibilidad, ya que los puntos de unión pueden ser decididamente más complejos para hacer lo que quieras.

Parece que cflow, por ejemplo, no se puede hacer con PostSharp.

Es como Spring en que es una versión reducida de AOP para que sea más fácil de usar.

Actualización: aunque no creo que esté completamente actualizada, esta es una buena idea en cuanto a lo que apoya AspectJ: http://www.eclipse.org/aspectj/doc/released/ progguide / index.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top