Conceptos de AOP explicados para el muñeco


19

¿Alguien puede explicar los conceptos de AOP para tontos: punto de unión, corte de punto, tejido, etc.

Por ejemplo: Aspecto: una modularización de una preocupación que atraviesa múltiples clases. Qué significa eso?

Respuestas:


15

Piense en una preocupación como un grupo funcional, por ejemplo, registro, auditoría, seguridad.

Estas funcionalidades siempre están presentes en la mayoría de los códigos, pero en realidad no viven en nuestras clases de animales-> perros, son funcionalidades que deberían vivir en muchas clases, son preocupaciones transversales .

  • Un Joinpoint es un lugar en el código donde se ejecuta el código de aspecto.

  • Un punto de corte es cómo decir qué código se ejecuta en el punto de unión.

  • Tejido : es cuando el compilador / sistema toma su código normal e incluye todo el código AOP para que active el código correcto, etc., puede pensar en esto como un paso adicional de precompilación.

Un ejemplo simple y comprensible es:

  1. Queremos rastrear todas las llamadas a métodos con fines de depuración (es decir, queremos ver qué métodos se llaman en qué orden).
  2. Creamos un aspecto que registra el nombre del método cuando se llama
  3. Creamos puntos de corte que asocian el aspecto con todos los métodos en el código. En la mayoría de los marcos de AOP, puede hacerlo fácilmente con algunos comodines
  4. Ahora tenemos el registro de todos los métodos llamados.

Tenga en cuenta que la terminología difiere ligeramente entre diferentes implementaciones y marcos de AOP.


Justo cuando estaba escribiendo mi larga respuesta! El tuyo es más conciso, me gusta. Lo editará ligeramente para mayor claridad.
Martijn Verburg

Gracias, debería aprender las reglas de formato, sigo olvidando.
Jonno

Parece que esto sería simple de implementar con decoradores Python o macros Lisp- S / N?
Paul Nathan

@Paul: no estoy familiarizado con ninguna de las construcciones que mencionas, me temo, y un rápido google no me dio suficiente información para responder de ninguna manera.
Jonno

@PaulNathan: AOP es bastante simple en lenguajes dinámicos. Se puede crear un marco AOP simple en una tarde. En lenguajes compilados como Java, la vida no es tan dulce.
Kevin Cline

-1

Leer en secuencia

Cada definición se basa en las anteriores.

Preocupación transversal

Algo que le molesta (preocupación) en todas partes (transversal) en su aplicación. por ejemplo, registro o seguridad

Aspecto

Un fragmento de código que se agrega automáticamente antes , después o ambos ( alrededor ) de su código existente

PointCut y JoinPoint

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

Pointcut

Un lugar en la ejecución de código donde se ejecuta parte del aspecto.

JoinPoint

El punto donde su aspecto "se une" al punto de corte. En un punto de unión "antes" tendrá acceso a los parámetros, en un punto de unión "después" tendrá acceso al valor de retorno. Si se produce una excepción, es posible que necesite un "try-catch-finally" para manejarlo o volver a lanzarlo.

Costura

El proceso de agregar aspectos alrededor de un punto de corte


Quien haya rechazado mi respuesta, deje un comentario por qué, si no le importa. Prometo que no comenzaré una discusión al respecto. Sin embargo, me gustaría saber qué podría haber hecho mejor. ¡Gracias!
Prashant
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.