2010-02-04 15 views
47

Mi piacerebbe fare una foto di quali sono i possibili casi per un coinvolgimento effettivo di AOP nella progettazione delle applicazioni. Tutto quello che ho incontrato finora è:Quali sono i possibili casi di utilizzo di AOP?

  • registrazione legate
  • controlli di sicurezza
  • di gestione delle transazioni
  • tweaking di un'applicazione legacy

C'è altro?

(Non deve essere necessariamente procura basato AOP Primavera - piuttosto JBoss AOP.)

(Related question)

+1

"i casi possibili"? Questa è una collezione quasi * infinita *. Non tutti sono comunque una buona idea. Metti tutto è possibile. C'è un modo per restringere o mettere a fuoco questa domanda? –

+1

Leggere bene: la domanda conteneva "i possibili casi per un efficace inversione di AOP nella progettazione dell'applicazione". Con ciò intendo casi in cui è una buona idea usare AOP. Scusa se la domanda non è chiara. –

+0

Dovrebbe essere wiki della comunità – skaffman

risposta

25

posso darvi due esempi in cui lo usiamo:

  • Registrazione automatica degli oggetti in JMX per la gestione remota. Se una classe è annotata con la nostra annotazione @AutoRegister, abbiamo un aspetto che controlla le nuove istanze di quella classe e le registra automaticamente in JMX.

  • Registrazione di controllo (il caso di utilizzo AOP standard gold). È un po 'approssimativo, ma l'approccio generale è quello di annotare metodi che rappresentano un'azione verificabile. In combinazione con qualcosa come Primavera di sicurezza, siamo in grado di avere una buona idea di:

    • chi è l'utente
    • quale metodo che stanno invocando
    • quali dati che stanno fornendo
    • che ora il metodo è stato invocato
    • se l'invocazione ha avuto successo o meno (ad esempio, se un'eccezione è stato gettato)
3

livello di metodo di caching, se il metodo è senza stato (mi riferisco restituisce lo stesso valore quando viene richiamato più volte con i valori dei parametri stessi). Questo è più efficace nel caso dei metodi DAO perché evita il successo del database.

4
  • Blocco lettura/scrittura. Invece di replicare lo stesso snippet, ho usato un aspetto per definire i metodi che richiedevano un blocco di lettura o un blocco esclusivo.
7

Per vedere la copertura di AOP in termini di applicabilità, vi consiglio davvero di leggere il libro Aspect-Oriented-Software-Development-Use-Cases.Questo libro elabora casi d'uso di requisiti funzionali e non funzionali usando AOP. Dopo di che si vedrà che gli aspetti possono essere utilizzati per più requisiti di registrazione, l'analisi, la sicurezza, ecc

2
  • gestione delle eccezioni: non c'è bisogno di ripetere l'elenco orribile di try ... catch, cattura, cattura ecc. - significa anche che la gestione delle eccezioni è garantita per essere coerente.
  • Monitoraggio delle prestazioni: molto utile poiché l'utilizzo di un aspetto non è intrusivo e può essere eseguito dopo il fatto e quindi disattivato quando non è più necessario.
1

mi consiglia anche aspetti per:

  • metodo chiamate asincrone
  • Monitoraggio

con molla e tcServer (sviluppatore), è in grado di monitorare con facilità tutti i vostri bean Spring con Annotazione @Component. È possibile visualizzare il tempo utilizzato, i dati di input e di ritorno incluse le eccezioni.

1

InotifyPropertyChanged e simili orrori.

Fondamentalmente, ovunque ci sia un codice che assomigli a questo, usa un aspetto e il gioco è fatto.

3

Lo utilizziamo per la gestione delle licenze software, ovvero consente l'esecuzione del software solo se nel computer sono installate alcune licenze specifiche. Non è diverso dagli usi elencati, poiché è una forma di controllo di sicurezza.

ho pubblicato un blog che descrive un'implementazione pratica here

1

controllo runtime dei contratti di codice. Code Contracts for .NET utilizza AOP per

Controllo di runtime. Il nostro reporter binario modifica un programma iniettando i contratti, che vengono controllati come parte dell'esecuzione del programma.

0

Utilizziamo AspectJ per eseguire AOP. I casi d'uso diversi da quelli sopra indicati sono i seguenti:

  • Restringere l'accesso alle chiamate di metodo solo a poche classi.
  • Annotazione automatica di metodi/classi/campi selezionati.
Problemi correlati