Esempi di AOP (Gian Maria Ricci)

22
AOP Strutturare il codice per aop

description

 

Transcript of Esempi di AOP (Gian Maria Ricci)

Page 1: Esempi di AOP (Gian Maria Ricci)

AOPStrutturare il codice per aop

Page 2: Esempi di AOP (Gian Maria Ricci)

Chi sono??• Ricci Gian Maria• [email protected]• Twitter: @alkampfer• Blog: http://www.codewrecks.com

Page 3: Esempi di AOP (Gian Maria Ricci)

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

Page 4: Esempi di AOP (Gian Maria Ricci)

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

Page 5: Esempi di AOP (Gian Maria Ricci)

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

Page 6: Esempi di AOP (Gian Maria Ricci)

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

Page 7: Esempi di AOP (Gian Maria Ricci)

RUN TIME WEAVING CON DECORATOR PATTERN

AOP

Page 8: Esempi di AOP (Gian Maria Ricci)

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

Page 9: Esempi di AOP (Gian Maria Ricci)

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

Page 10: Esempi di AOP (Gian Maria Ricci)

Decorator pattern

AOP

La chiamata viene intercettata e viene semplicemente propagata al RealSubject

Page 11: Esempi di AOP (Gian Maria Ricci)

DEMOAOP

Page 12: Esempi di AOP (Gian Maria Ricci)

Decorator pattern• Implementazione semplice ma poco

riutilizzabile.

Pro Contro

wrapper per aspetto

Poco riutilizzabile

Configurazione

Semplice

Sufficiente IoC / DI

AOP

Page 13: Esempi di AOP (Gian Maria Ricci)

RUN TIME WEAVING CON CASTLE WINDSOR

AOP

Page 14: Esempi di AOP (Gian Maria Ricci)

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

Page 15: Esempi di AOP (Gian Maria Ricci)

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

Page 16: Esempi di AOP (Gian Maria Ricci)

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

Page 17: Esempi di AOP (Gian Maria Ricci)

DEMOAOP

Page 18: Esempi di AOP (Gian Maria Ricci)

AOP SU SERVIZI WCF CON CASTLE WINDSOR

AOP

Page 19: Esempi di AOP (Gian Maria Ricci)

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

Page 20: Esempi di AOP (Gian Maria Ricci)

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

Page 21: Esempi di AOP (Gian Maria Ricci)

DEMOAOP

Page 22: Esempi di AOP (Gian Maria Ricci)

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