¿Qué es la programación orientada a aspectos?
Entiendo la programación orientada a objetos y he estado escribiendo programas OO durante mucho tiempo. La gente parece hablar de programación orientada a aspectos, pero nunca he aprendido realmente qué es ni cómo utilizarla. ¿Cuál es el paradigma básico?
Esta pregunta está relacionada, pero no la formula del todo:
Programación orientada a aspectos versus programación orientada a objetos
AOP aborda el problema de las preocupaciones transversales , que serían cualquier tipo de código que se repite en diferentes métodos y que normalmente no se puede refactorizar por completo en su propio módulo, como con el registro o la verificación. Entonces, con AOP puedes dejar esas cosas fuera del código principal y definirlas verticalmente así:
function mainProgram()
{
var x = foo();
doSomethingWith(x);
return x;
}
aspect logging
{
before (mainProgram is called):
{
log.Write("entering mainProgram");
}
after (mainProgram is called):
{
log.Write( "exiting mainProgram with return value of "
+ mainProgram.returnValue);
}
}
aspect verification
{
before (doSomethingWith is called):
{
if (doSomethingWith.arguments[0] == null)
{
throw NullArgumentException();
}
if (!doSomethingWith.caller.isAuthenticated)
{
throw Securityexception();
}
}
}
Y luego se usa un tejedor de aspectos para compilar el código en esto:
function mainProgram()
{
log.Write("entering mainProgram");
var x = foo();
if (x == null) throw NullArgumentException();
if (!mainProgramIsAuthenticated()) throw Securityexception();
doSomethingWith(x);
log.Write("exiting mainProgram with return value of "+ x);
return x;
}
Desafortunadamente, parece sorprendentemente difícil hacer que AOP sea realmente útil en una organización normal de tamaño medio-grande. (Apoyo al editor, sensación de control, el hecho de que comienzas con las cosas no tan importantes que conducen a la descomposición del código, la gente que regresa a casa con sus familias, etc.)
Pongo mis esperanzas en la programación orientada a compuestos , que es algo cada vez más realista. Se conecta con muchas ideas populares y te ofrece algo realmente interesante.
Vea una implementación prometedora aquí: qi4j.org/
PD. En realidad, creo que una de las ventajas de AOP es también su talón de Aquiles: no es intrusivo y permite que las personas lo ignoren si pueden, por lo que será tratado como una preocupación secundaria en la mayoría de las organizaciones.