Aspect Oriented Programming
14-07-2024
La programación orientada a aspectos (AOP en inglés) es un paradigma de programación distinto al que estamos acostumbrados. Para describirlo de manera sencilla, se trata de ejecutar piezas de código (Advice), en un punto concreto de la ejecución (JoinPoint), sin que ese código ejecutado sepa que por detrás se ha ejecutado algo. Sí, es básicamente añadir “side effects” al código.
Dicho de esta manera puede sonar super extraño y seguro te preguntarás, ¿para qué iba a querer añadir esas acciones a mi código? ¿No se supone que hacer esto está mal? La respuesta es, depende… Sí, tener “side effects” en el código no es precisamente lo más recomendable, pero dependiendo de qué acciones desencadenemos, podemos permitirnos el lujo de usarlas o no.
Veamos los conceptos básicos mientras vemos el uso práctico de los mismos.
Aspect
Es una funcionalidad transversal que se va a implementar. En nuestro caso, el logging de la aplicación. Solemos ver un montón de código en nuestras aplicaciones, incluso en nuestra capa de dominio que tiene que ver con loggear, ya que es super importante para la observabilidad de la aplicación, pero en cierta manera, eso no define nuestro dominio. No suele ser una norma de nuestro dominio que dejemos rastro de las operaciones que se van tomando, por lo que acabamos con un montón de líneas de código irrelevantes para el dominio, que nosotros como personas técnicas, necesitamos para la resolución de problemas.
JoinPoint
Es el punto en la ejecución en el cual un aspecto puede ser ejecutado. Es decir, es el punto en el que nuestro aspecto ejecutará una acción adicional cuando esta pase. Puede ser una llamada a un método, un acceso a una propiedad de una clase, un lanzamiento de excepción, e incluso, la modificación de un campo de una clase. En nuestro caso, un método sobre el que queramos escribir un log.
Advice
Es la pieza de código que será ejecutada en un JoinPoint
concreto. Una clase que escribirá el mensaje que nos pasen.
PointCut
Es la definición de la relación entre los JoinPoint
y los Advice
, es decir, la forma de especificar que un AdviceX
será ejecutado cuando un JoinPointY
tenga lugar en la ejecución del programa.
Veamos un diagrama para ilustrar todos estos conceptos:
Este post, es sólo una introducción a los conceptos de AOP para facilitar la comprensión de un siguiente post sobre logging de nuestra aplicación, usando el stack ELK.