Concetti AOP spiegati per il manichino


19

Qualcuno può spiegare i concetti AOP per i manichini: unire punto, taglio punto, tessitura ecc.

Ad esempio: Aspetto: una modularizzazione di una preoccupazione che attraversa più classi. Cosa significa?

Risposte:


15

Pensa a una preoccupazione come a un gruppo di funzionalità, ad esempio registrazione, controllo, sicurezza

Queste funzionalità sono sempre presenti nella maggior parte del codice, ma in realtà non vivono nelle nostre classi di animali> cani - sono funzionalità che dovrebbero vivere in molte classi - sono preoccupazioni trasversali .

  • Un Joinpoint è un punto nel codice in cui viene effettivamente eseguito il formato.

  • Un punto è come dire quale codice viene eseguito nel punto di congiunzione.

  • La tessitura - è quando il compilatore / sistema prende il tuo codice normale e include tutto il codice AOP in modo che inneschi il codice corretto, ecc. - Può pensare a questo come un ulteriore passo di pre-compilazione.

Un semplice esempio comprensibile è:

  1. Vogliamo tenere traccia di tutte le chiamate di metodo a scopo di debug (ovvero vogliamo vedere quali metodi vengono chiamati in quale ordine).
  2. Creiamo un aspetto che registra il nome del metodo quando viene chiamato
  3. Creiamo punti che associano l'aspetto a tutti i metodi nel codice. Nella maggior parte dei framework AOP puoi farlo facilmente con alcuni caratteri jolly
  4. Ora abbiamo la registrazione di ogni metodo mai chiamato.

Si noti che la terminologia differisce leggermente tra le diverse implementazioni e i framework AOP.


Proprio mentre stavo scrivendo la mia lunga risposta! La tua è più concisa, mi piace. Lo modificherà leggermente per chiarezza.
Martijn Verburg,

Grazie, dovrei imparare le regole di formattazione, continuare a dimenticare.
Jonno

Sembra che questo sarebbe semplice da implementare con decoratori Python o macro Lisp- S / N?
Paul Nathan,

@Paul - non hai familiarità con nessuno dei costrutti che dici, temo e un veloce google non mi ha dato abbastanza spunti per rispondere in entrambi i modi.
Jonno

@PaulNathan: AOP è piuttosto semplice in linguaggi dinamici. Un semplice framework AOP può essere creato in un pomeriggio. In linguaggi compilati come Java la vita non è così dolce.
Kevin Cline,

-1

Leggi in sequenza

Ogni definizione si basa su quelle precedenti.

Preoccupazioni trasversali

Qualcosa che ti preoccupa (preoccupazione) ovunque (taglio trasversale) in tutta l'applicazione. ad es. registrazione o sicurezza

Aspetto

Un pezzo di codice che viene aggiunto automaticamente prima , dopo o entrambi ( intorno ) al codice esistente

PointCut e 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 posto nell'esecuzione del codice in cui viene eseguita parte dell'aspetto.

joinpoint

Il punto in cui il tuo aspetto "unisce" il punto. Ad un joinPoint "prima" avrai accesso ai parametri, a joinPoint "dopo" avrai accesso al valore restituito. Se viene generata un'eccezione, potrebbe essere necessario un "try-catch-finally" per gestirla o rilanciarla.

Tessitura

Il processo di aggiunta di aspetti attorno a un punto


Chiunque abbia votato verso il basso la mia risposta, per favore lascia un commento perché - se non ti dispiace. Prometto che non avvierò una discussione al riguardo. Vorrei tuttavia sapere cosa avrei potuto fare meglio. Grazie!
Prashant,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.