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.
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.
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.
Es la pieza de código que será ejecutada en un JoinPoint
concreto. Una clase que escribirá el mensaje que nos pasen.
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.
¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.
Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?
Pero espera 🖐 que tenemos un conflicto interno. A nosotros las newsletter nos parecen 💩👎👹 Por eso hemos creado la LEAN LISTA, la primera lista zen, disfrutona y que suena a rock y reggaeton del sector de la programación. Todos hemos recibido newsletters por encima de nuestras posibilidades 😅 por eso este es el compromiso de la Lean Lista