18/05/13 10:04
netarrow
Non ho usato la AOP in java con aspectJ, ma in C# con PostSharp.
In generale serve a incapsulare tutte quelle funzionalità trasversali a tutti gli oggetti.
Ti scrivo due esempio in C#, aspectJ userà altre sintassi probabilmente ma i concetti dovrebbero restare gli stessi.
Ad esempio la gestione degli errori, invece che scrivere in ogni metodo
public void blabla() {
try {
...
} catch(Exception ex) {
Logger.LogError("Errore in blabla()", ex)
}
}
...
uno può crearsi un aspetto ExceptionHandlerAspect e fare
[ExceptionHandlerAspect]
public void blabla() {
...
}
E il codice di ExceptionHandlerAspect, nel caso di esempio con PostSharp è qualcosa del genere
public class ExceptionHandlerAspect : OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
// gestisci in generale le eccezioni accedendo alle informazioni da args
}
}
Le funzionalità sintetizzabili in un aspetto sono quindi tutte quelle che aprono o chiudono la chiamata ad un oggetto quindi validazione, caching, autorizzazioni, profiling e simili.
La AOP poi può essere implementata o a compile-time come fanno appunto aspectJ e postsharp, quindi il tuo codice verrà modificato al volo in compilazione aggiungendo in base agli aspetti codice prima e dopo il codice originale del tuo metodo.
Oppure si possono implementare con la dependency injection, dove aggiungi degli interceptor nel dependency container che wrappano la chiamata ai tuoi oggetti col codice dell'aspetto.
Ultima modifica effettuata da netarrow 18/05/13 10:05
aaa