AOP-Konzepte für den Dummy erklärt

19

Kann jemand AOP-Konzepte für Dummies erklären: Verbinden, Schneiden, Weben usw.

Beispiel: Aspekt: Eine Modularisierung eines Unternehmens, die mehrere Klassen umfasst. Was bedeutet das?

dummJoe
quelle

Antworten:

15

Stellen Sie sich ein Problem als eine Funktionsgruppe vor, z. B. Protokollierung, Prüfung, Sicherheit

Diese Funktionalitäten sind in den meisten Codes jemals vorhanden, aber in unseren Tier-> Hundeklassen leben sie nicht wirklich - es handelt sich um Funktionalitäten, die in vielen Klassen leben sollten - es handelt sich um Querschnittsthemen .

  • Ein Joinpoint ist eine Stelle im Code, an der der Aspektcode tatsächlich ausgeführt wird.

  • Ein Pointcut gibt an, welcher Code am Jointpoint ausgeführt wird.

  • Weben - wenn der Compiler / das System Ihren normalen Code verwendet und den gesamten AOP-Code einschließt, um den richtigen Code usw. auszulösen - kann dies als zusätzlichen Vorkompilierungsschritt angesehen werden.

Ein einfaches verständliches Beispiel ist:

  1. Wir wollen alle Methodenaufrufe zu Debugging-Zwecken verfolgen (dh wir wollen sehen, welche Methoden in welcher Reihenfolge aufgerufen werden).
  2. Wir erstellen einen Aspekt, der den Namen der Methode protokolliert, wenn sie aufgerufen wird
  3. Wir erstellen Pointcuts, die den Aspekt mit allen Methoden im Code verknüpfen. In den meisten AOP-Frameworks können Sie dies problemlos mit einigen Platzhaltern tun
  4. Wir haben jetzt die Protokollierung jeder jemals aufgerufenen Methode.

Bitte beachten Sie, dass die Terminologie zwischen verschiedenen Implementierungen und AOP-Frameworks geringfügig variiert.

Jonno
quelle
Gerade als ich meine lange Antwort schrieb! Ihre ist prägnanter, ich mag es. Wird aus Gründen der Übersichtlichkeit geringfügig bearbeitet.
Martijn Verburg
Danke, ich sollte die Formatierungsregeln lernen, immer wieder vergessen.
Jonno
Scheint, als wäre dies mit Python-Dekoratoren oder Lisp-Makros einfach umzusetzen - Y / N?
Paul Nathan
@Paul - nicht vertraut mit beiden Konstrukten, die Sie erwähnen, ich fürchte, und eine schnelle Google gab mir nicht genug Einblick, um so oder so zu antworten.
Jonno
@PaulNathan: AOP ist in dynamischen Sprachen ziemlich einfach. Ein einfaches AOP-Framework kann an einem Nachmittag erstellt werden. In kompilierten Sprachen wie Java ist das Leben nicht so süß.
Kevin Cline
-1

In der Reihenfolge lesen

Jede Definition baut auf den vorherigen auf.

Querschnittsthema

Etwas, das Sie überall in Ihrer Anwendung stört (betrifft) (übergreifend). zB Protokollierung oder Sicherheit

Aspekt

Ein Codeabschnitt, der automatisch vor , nach oder um Ihren vorhandenen Code ( herum ) hinzugefügt wird

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

Eine Stelle in der Codeausführung, an der ein Teil des Aspekts ausgeführt wird.

JoinPoint

Der Punkt, an dem Ihr Aspekt den Punktschnitt "verbindet". Bei einem JoinPoint "vor" haben Sie Zugriff auf Parameter, bei einem JoinPoint "nach" haben Sie Zugriff auf den Rückgabewert. Wenn eine Ausnahme ausgelöst wird, benötigen Sie möglicherweise ein "try-catch-finally", um sie zu verarbeiten oder erneut auszulösen.

Weberei

Der Prozess des Hinzufügens von Aspekten um einen Pointcut

Prashant
quelle
Wer auch immer meine Antwort abgelehnt hat, hinterlasse bitte einen Kommentar, warum - wenn es dir nichts ausmacht. Ich verspreche, dass ich nicht darüber streiten werde. Ich würde aber gerne wissen, was ich besser hätte machen können. Vielen Dank!
Prashant