aop - programming - ¿Qué es la programación orientada a aspectos?
programacion orientada a aspectos spring boot (8)
Entiendo la programación orientada a objetos y he estado escribiendo programas OO durante mucho tiempo. La gente parece hablar sobre programación orientada a aspectos, pero nunca aprendí realmente qué es ni cómo usarla. ¿Cuál es el paradigma básico?
Esta pregunta está relacionada, pero no la pregunta:
Programación Orientada a Aspectos vs. Programación Orientada a Objetos
AOP aborda el problema de las preocupaciones transversales , que sería cualquier tipo de código que se repite en diferentes métodos y normalmente no se puede refactorizar completamente 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 definirlo 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 un tejedor de aspecto se usa 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;
}
AOP es una forma de modularizar mejor su aplicación para una funcionalidad que abarca múltiples límites. AOP es otra forma de encapsular estas características y seguir Single Responsiblity al mover estas preocupaciones transversales (registro, manejo de errores, etc.) fuera de los componentes principales de su aplicación. Cuando se usa apropiadamente, el AOP puede conducir a niveles más altos de mantenibilidad y extensibilidad en su aplicación a lo largo del tiempo.
Copiado de Spring in Action
AOP se define a menudo como una técnica que promueve la separación de preocupaciones en un sistema de software. Los sistemas se componen de varios componentes, cada uno responsable de una pieza específica de funcionalidad. Pero a menudo estos componentes también tienen responsabilidades adicionales más allá de su funcionalidad principal. Los servicios del sistema, como el registro, la gestión de transacciones y la seguridad, a menudo encuentran su camino en componentes cuyas responsabilidades principales son otra cosa. Estos servicios de sistema se conocen comúnmente como preocupaciones transversales, ya que tienden a cortar a través de múltiples componentes en un sistema.
Copiado de un duplicado para completar (Buzzer):
Los atributos de clase y método en .NET son una forma de programación orientada a aspectos. Usted decora sus clases / métodos con atributos. Detrás de escena esto agrega código a su clase / método que realiza las funciones particulares del atributo. Por ejemplo, marcar una clase serializable permite que se serialice automáticamente para su almacenamiento o transmisión a otro sistema. Otros atributos pueden marcar ciertas propiedades como no serializables y se omitirán automáticamente del objeto serializado. La serialización es un aspecto implementado por otro código en el sistema y aplicado a su clase mediante la aplicación de un atributo de "configuración" (decoración).
Copiado de un duplicado para completar (Einstein):
Los ejemplos clásicos son seguridad y registro. En lugar de escribir código dentro de su aplicación para registrar la ocurrencia de xo verificar el objeto z para el control de acceso de seguridad, hay un artilugio de lenguaje "fuera de banda" de código normal que puede inyectar sistemáticamente seguridad o iniciar sesión en rutinas que no tienen nativamente de tal manera que, aunque su código no lo suministre, se ocupa de ello.
Un ejemplo más concreto es el sistema operativo que proporciona controles de acceso a un archivo. Un programa de software no necesita verificar restricciones de acceso porque el sistema subyacente funciona para eso.
Si cree que necesita AOP en mi experiencia, realmente necesita invertir más tiempo y esfuerzo en una gestión de metadatos adecuada dentro de su sistema con un enfoque en el diseño estructural / de sistemas bien pensado.
Desafortunadamente, parece ser sorprendentemente difícil hacer que el AOP sea realmente útil en una organización de tamaño medio-grande normal. (Apoyo del editor, sentido del control, el hecho de que empiezas con las cosas no tan importantes que conducen a la podredumbre del código, las personas que van a casa con sus familias, etc.)
Puse mis esperanzas en la programación orientada a compuestos , que es algo cada vez más realista. Se conecta a muchas ideas populares y te ofrece algo realmente genial.
Mire una implementación prometedora aquí: qi4j.org/
PD. En realidad, creo que una de las bellezas con AOP es también su talón de Aquiles: no intrusiva, dejando que la gente lo ignore si puede, por lo que será tratado como una preocupación secundaria en la mayoría de las organizaciones.
El AOP se puede utilizar para realizar acciones que no están relacionadas con la lógica comercial de su aplicación, como el registro, el almacenamiento en caché, etc. Estas acciones pueden colocarse en una parte separada de su aplicación y luego reutilizarse en toda la aplicación. Generalmente hay dos formas de lograr esto. Inyectar código automágicamente por un preprocesador antes / después de un método, o unir clases proxy que interceptan una llamada a un método y luego pueden ejecutar cosas antes / después de una llamada a un método.
Aquí hay un ejemplo en .Net. Utiliza clases de proxy para interceptar llamadas a métodos y ejecutar código antes de las llamadas posteriores al método saif.
Programación Orientada a Aspectos (AOP) en .NET Core y C # usando AutoFac y DynamicProxy
Hay un ejemplo de AOP, usó AOP de primavera como un ejemplo. El ejemplo es bastante fácil de entender.
El marco Spring AOP (programación orientada a aspectos) se utiliza para modular las preocupaciones transversales en aspectos. En pocas palabras, es solo un interceptor para interceptar algunos procesos, por ejemplo, cuando se ejecuta un método, Spring AOP puede secuestrar el método de ejecución y agregar funcionalidad adicional antes o después de la ejecución del método.
Referencia: http://www.mkyong.com/spring/spring-aop-examples-advice/