Les concepts AOP expliqués pour le mannequin

19

Quelqu'un peut-il expliquer les concepts AOP pour les nuls: point de jonction, coupe de point, tissage, etc.

Par exemple: Aspect: une modularisation d'une préoccupation qui recoupe plusieurs classes. Qu'est-ce que ça veut dire?

dumbJoe
la source

Réponses:

15

Considérez une préoccupation comme un groupe de fonctionnalités, par exemple la journalisation, l'audit, la sécurité

Ces fonctionnalités sont toujours présentes dans la plupart des codes, mais elles ne vivent pas vraiment dans nos classes d'animaux-> chiens - ce sont des fonctionnalités qui devraient vivre dans de nombreuses classes - elles sont des préoccupations transversales .

  • Un Joinpoint est un endroit dans le code où le code d'aspect est réellement exécuté.

  • Un pointcut est comment dire quel code s'exécute au point commun.

  • Le tissage - c'est quand le compilateur / système prend votre code normal et inclut tout le code AOP afin qu'il déclenche le bon code, etc. - peut penser à cela comme une étape de précompilation supplémentaire.

Un exemple simple et compréhensible est:

  1. Nous voulons suivre tous les appels de méthode à des fins de débogage (c'est-à-dire que nous voulons voir quelles méthodes sont appelées dans quel ordre).
  2. Nous créons un aspect qui enregistre le nom de la méthode lorsqu'elle est appelée
  3. Nous créons des raccourcis qui associent l'aspect à toutes les méthodes du code. Dans la plupart des frameworks AOP, vous pouvez le faire facilement avec des caractères génériques
  4. Nous avons maintenant la journalisation de chaque méthode jamais appelée.

Veuillez noter que la terminologie diffère légèrement entre les différentes implémentations et les cadres AOP.

Jonno
la source
Juste au moment où j'écrivais ma longue réponse! Le vôtre est plus concis, je l'aime bien. Le modifiera légèrement pour plus de clarté.
Martijn Verburg
Merci, je devrais apprendre les règles de formatage, j'oublie toujours.
Jonno
On dirait que cela serait simple à implémenter avec des décorateurs Python ou des macros Lisp - O / N?
Paul Nathan
@Paul - je ne suis pas familier avec l'une ou l'autre des constructions dont vous parlez, j'ai peur et un rapide google ne m'a pas donné assez d'informations pour répondre de toute façon.
Jonno
@PaulNathan: AOP est assez simple dans les langages dynamiques. Un cadre AOP simple peut être créé en un après-midi. Dans les langages compilés comme Java, la vie n'est pas si douce.
kevin cline
-1

Lire en séquence

Chaque définition s'appuie sur les précédentes.

Préoccupation transversale

Quelque chose qui vous dérange (inquiétude) partout (transversal) dans votre application. par exemple, journalisation ou sécurité

Aspect

Un morceau de code qui est automatiquement ajouté avant , après ou les deux ( autour ) de votre code existant

PointCut & 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

Une place dans l'exécution de code où une partie de l'aspect s'exécute.

JoinPoint

Le point où votre aspect "rejoint" le point de coupe. A "avant" joinPoint, vous aurez accès aux paramètres, à "après" joinPoint, vous aurez accès à la valeur de retour. Si une exception est levée, vous pouvez avoir besoin d'un "try-catch-finally" pour la gérer ou la relancer.

Tissage

Le processus d'ajout d'aspects autour d'un pointcut

Prashant
la source
Quiconque a rejeté ma réponse, veuillez laisser un commentaire pourquoi - si cela ne vous dérange pas. Je promets de ne pas commencer une discussion à ce sujet. J'aimerais cependant savoir ce que j'aurais pu faire de mieux. Je vous remercie!
Prashant