esempi di aop (gian maria ricci)
DESCRIPTION
TRANSCRIPT
AOPStrutturare il codice per aop
Chi sono??• Ricci Gian Maria• [email protected]• Twitter: @alkampfer• Blog: http://www.codewrecks.com
Cosa è AOP• I principi OO non permettono di modellare
comportamenti “trasversali” agli oggetti• Si dice “trasversale” un comportamento valido
per più oggetti• AOP permette di applicare un comportamento
su un oggetto • Per comportamento si intende l’esecuzione di
codice quando viene chiamato un metodo o una proprietà di un oggetto.
AOP
OBJ
Caller
Weaving• Weaving is the textile art in which two distinct
sets of yarns or threads, called the warp and the filling or weft (older woof), are interlaced with each other to form a fabric or cloth
• Nella programmazione il concetto di Weaving è appunto correlato all’intrecciare il comportamento degli oggetti base con gli aspetti
• Esistono molti modi di effettuare Weaving
AOP
Compile Time Weaving• Per compile time weaving si intende la
possibilità di applicare gli aspetti a livello di codice sorgente
• Modificaer i sorgenti prima della compilazione• Supporto da parte del compilatore• Effettuare una post decompliazione e
ricompilazione (post sharp)
AOP
Run time Weaving• Modificare il comportamento di un oggetto
durante l’esecuzione
• Profiler API • Decorator Pattern• Dynamic generation of proxy (Castle, Spring,
Aspect#)• ContextBoundObjet (Enterprise library policy
Injection Application Block).
AOP
RUN TIME WEAVING CON DECORATOR PATTERN
AOP
Prerequisiti• Il Run-Time weaving è possibile solo in
situazioni di basso accoppiamento• Se il chiamante istanzia direttamente un
oggetto, quest’ultimo non può supportare AOP• AOP è quindi un concetto che si sposa
perfettamente con IoC / DI• Il chiamante utilizza interfacce e non necessita
di sapere l’istanza concreta che viene usata.
Interface
Caller
Aspect
Obj
AOP
SmsMessageSender
MessageSenderLog
Decorator pattern• Il chiamante vuole interagire con un
ISendMessage• Esiste un’implementazione concreta chiamata
SmsMessageSender• Si crea un wrapper con l’aspetto desiderato• Si registra nel contenitore IoC o il componente
SmsMessageSender• Se necessario si effettua il wrapping con il
decorator
ISendMessage
Caller
AOP
Decorator pattern
AOP
La chiamata viene intercettata e viene semplicemente propagata al RealSubject
DEMOAOP
Decorator pattern• Implementazione semplice ma poco
riutilizzabile.
Pro Contro
wrapper per aspetto
Poco riutilizzabile
Configurazione
Semplice
Sufficiente IoC / DI
AOP
RUN TIME WEAVING CON CASTLE WINDSOR
AOP
Interceptors• Il Run Time weaving si basta spesso
sulla generazione dinamica di proxy• Per ogni interfaccia su cui si vuole
fare AOP viene creato dinamicamente un proxy con il prinicpio del decorator
• In questo proxy vengono inserite delle chiamate agli eventuali intercettori che implementano una data interfaccia
• Il programmatore deve solamente implementare l’interfaccia richiesta, la libreria fa tutto il resto
Service
Proxy
Interceptor
Caller
AOP
Interceptors
Interceptor1 Interceptor2 Interceptor3 interceptor4
• Un intercettore è in grado di rispondere ad un evento di chiamata di un metodo
• Ogni intercettore può o meno far proseguire la chiamata
• Un intercettore è in grado di cambiare i valori di ritorno e gestire le eccezioni
OBJ
Caller
AOP
Interceptors• Nel flusso normale ogni intercettore
esegue il suo codice e fa proseguire la chiamata
• Alcuni componenti possono alterare il flusso
• Il componente tipico che ha questo comportamento è ad esempio l’aspetto di cache.
• Se il componente individua che la chiamata può essere cachata allora non la propaga
DAL
Cache
Security
Log
AOP
DEMOAOP
AOP SU SERVIZI WCF CON CASTLE WINDSOR
AOP
AOP su servizi WCF• L’ambiente WCF è il classico in cui
molte funzionalità sono trasversali• La soluzione più elegante è
soddisfare tutte le funzionalità comuni a tutti i servizi tramite AOP
• Per fare questo è necessario innanzitutto far si che le classi usate per servire una richiesta WCF vengano instanziate da Castle.
• La WCF castle facility si occupa di risolvere la classe che gestisce il servizio tramite un contenitore windsor.
AOP
AOP su servizi WCF• Una volta che il servizio viene risolto
con Castle è possibile aggiungere gli aspetti necessari.
• I servizi rappresentano uno dei punti più semplici ed intuitivi dove inserire aspetti tramite AOP
• Gli aspetti generici per i servizi solitamente sono infatti applicati a tutti i metodi e non è nemmeno necessario effettuare logica di selezione.A
OP
DEMOAOP
Altri aspetti tipici• Security: un aspetto che ad ogni
chiamata controlla su un db o su file i permessi richiesti per ogni metodo ed esegue una security assertion
• Cache: su alcuni metodi usare un cache provider per memorizzare il risultato di una chiamata ad un servizio wcf
• Test su dev: un aspetto in produzione che duplica ogni chiamata su un servizio dev per verificarne la compabilità retroattiva (penalizza un poco le performance in produzione)
AOP