El problema es que usted está comparando diferentes idiomas y tratando de forzar clavijas cuadradas en agujeros redondos
Para Java AspectJ satisface una necesidad debido a los límites en el idioma, pero .NET no necesariamente tiene estas limitaciones, ya que la JVM no lo hace, pero Java sí.
Por ejemplo, puede usar IronPython o IronRuby (además de otros) para escribir ensamblajes que son muy dinámicos, de modo que puede escribir un DSL (lenguaje específico del dominio) que permitirá a un usuario agregar un código que no es XML, pero cambiará la forma en que funciona el programa.
Puede usar métodos de extensión en C# para cambiar el comportamiento intercambiando ensamblados, de modo que tenga un ensamblado que tenga extensiones que se registren en un archivo, luego cambie ese ensamblaje por otro con el mismo espacio de nombres que enviará el datos a un servicio web, o hacer un noop.
Pero hay limitaciones que pueden ser difíciles de superar, como ser capaz de usar un aspecto para hacer algo en cada función llamada, como usar cflow (http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html), pero eso puede deberse a que no lo he hecho. Pensé lo suficiente acerca de cómo hacerlo.
Mi objetivo no es dar una explicación completa de cómo .NET no necesita AspectJ, sino mostrar que hay formas de obtener el comportamiento que puede esperar sin utilizar AOP.
Para las aplicaciones que se ejecutan en la JVM, puede usar Groovy, Clojure, JRuby y Scala, por ejemplo, para evitar las limitaciones de Java.
ACTUALIZACIÓN:
Tenía la esperanza de mantener mi respuesta más corto, pero una cierta comprensión de AOP puede ser útil añadir contexto a mi respuesta.
La Programación Orientada a Aspectos (AOP) es un paradigma de programación diferente, para una funcionalidad que abarca varias clases, como el registro. El registro es una situación común, donde es posible que desee registrar todas las consultas SQL que se utilizan, por lo que, en lugar de copiar el código de un lugar a otro, lo coloca en un lugar y se coloca en todos los lugares que especifique. para cambiar el destino del registro, lo cambia en un solo lugar.
Pero con AspectJ hay más opciones. Por ejemplo, vende un programa que almacena contraseñas. La empresa A usa IDEA, la compañía B usa AES. Para adaptarse, cambie el código que se usa en tiempo de ejecución para no arriesgarse a recompilar el código e introducir nuevos errores, y se cambia, de modo que cada vez que alguien llame al getPassword()
, se use el nuevo código para descifrarlo.
También puede agregar funcionalidad a una clase existente, así que pondría métodos en las interfaces para que todo lo que utilizara esa interfaz ahora tuviera acceso a las funciones, de modo que los métodos ahora fueran concretos, en la interfaz.
Pero, al usar otros lenguajes que están en .NET y JVM, puede hacer todo esto, con la misma modularidad, eligiendo cuidadosamente qué idioma usar. Por ejemplo, en Java puede acceder a clases escritas en Groovy o Scala, por lo que puede obtener más flexibilidad con estos idiomas y aún tener la aplicación principal en Java.
En C# puede usar F #, IronPython o IronRuby, por ejemplo, para obtener esta funcionalidad o, en algunos casos, puede usar C#.
Por lo tanto, la necesidad de una programación orientada a aspectos se ve disminuida debido a estos lenguajes funcionales dinámicos o fuertemente tipados disponibles en estas máquinas virtuales, pero usted cambia la complejidad de trabajar con aspectos con una solución multilingüe.
Para más información sobre AOP, IBM tenía algunos artículos increíbles sobre su uso, con su AOP @ Work serie: http://www.ibm.com/developerworks/views/java/[email protected]:
Para algunas reflexiones sobre AOP en .NET se puede leer Código mangling AOP vs. Proxy Runtime AOP , http://rogeralsing.com/2008/01/08/code-mangling-aop-vs-runtime-proxy-aop/
estoy considerando a hacer esta pregunta wiki comunitaria, pero no sé cómo :( – drasto
@drasto: CW ya no es posible, y en este caso, no es deseable. –
¿Cómo se votó fuera del tema? Esto es perfectamente aceptable. Tal vez un poco subjetivo, pero creo que el OP ha dado suficientes criterios para que todo esté bien. –