Thursday, April 28, 2005

Advice Weaving

Una de las fases mas importantes de AOP es el weaving. Una ves definido los aspectos, o sea, haber indentificado los puntos de ejecución por donde se va a ejecutar un determinado código que hace a la separación en incumbencias, se debe "tejer" o unir los aspecto al sistema. Esto significa que hay que, de alguna manera, introducir los advise al sistema.

Dependiendo de la herramienta [1] que estemos usando para escribir los aspectos variará la manera en que se haga el weaving [2]. Básicamente hay dos maneras de implementar el weaving: de manera estática (compile time) o de manera dinámica (runtime). Entonces los diferentes tipos de implementaciones de weaving son:

  • Compile-time weaving
  • Class load-time weaving
  • Hotswap weaving
  • Runtime OO methods
  • Bytecode modification weaving
  • Dynamic proxy weaving
  • VM level AOP

Estas implementaciones tiene ventajas y desventajas [2], las cuales permitiran tener mayor o menor control sobre los aspecto en diferentes fases del desarrollo (runtime, compile-time, debugging).

Como experiencia personal, la elección de un framework de AOP, fue la actividad más importante. Es necesario tener en cuenta ciertas características que están relacionadas con el proyecto. Como por ejemplo: qué capacidad tiene el framework de interactuar con
la IDE (flexibilidad, performance, etc), cuántos proyectos se necesitan manejar a la vez, cual es el impacto en el desarrollo, y cual es el impacto en producción. Además de cuál es el alcance y las necesidades particulares para mi sistema. Teniendo en cuanta todo esto resultó que, para las características del proyecto, fue necesario utilizar Javaassist [3], aplicar interceptores en class load-time, y ahí enganchar los advice.

Lamentablemte AOP tiene un impacto en la performance que puede ser mayor o menor, pero que hay que tener presente; digo que, si bien la separación en incumbencias mejora la calidad de mi sistema, esto tiene un costo.

[1] http://java-source.net/open-source/aspect-oriented-frameworks
[2] The Aspect Blog
[3] http://www.csg.is.titech.ac.jp/~chiba/javassist/