SlideShare une entreprise Scribd logo
1  sur  22
AOP
Strutturare il codice per aop
Chi sono??
• Ricci Gian Maria
• Alkampfer@nablasoft.com
• 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.
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
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)
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).
RUN TIME WEAVING
CON DECORATOR
PATTERN
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.
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
Decorator pattern
La chiamata viene intercettata e viene
semplicemente propagata al
RealSubject
DEMO
Decorator pattern
• Implementazione semplice ma poco
riutilizzabile.
RUN TIME WEAVING
CON CASTLE
WINDSOR
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
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
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
DEMO
AOP SU SERVIZI WCF
CON CASTLE
WINDSOR
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 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.
DEMO
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)

Contenu connexe

En vedette

Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al TestingDotNetMarche
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...DotNetMarche
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow FoundationDotNetMarche
 
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0DotNetMarche
 
Open Web Studio (Roberto Caporale)
Open Web Studio (Roberto Caporale)Open Web Studio (Roberto Caporale)
Open Web Studio (Roberto Caporale)DotNetMarche
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModelDotNetMarche
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - PrismDotNetMarche
 
C4021 Séance 8: Réseaux Sociaux
C4021 Séance 8: Réseaux SociauxC4021 Séance 8: Réseaux Sociaux
C4021 Séance 8: Réseaux SociauxAlexandru Panican
 

En vedette (11)

Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al Testing
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
 
Open XML & MOSS
Open XML & MOSSOpen XML & MOSS
Open XML & MOSS
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
 
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
 
Open Web Studio (Roberto Caporale)
Open Web Studio (Roberto Caporale)Open Web Studio (Roberto Caporale)
Open Web Studio (Roberto Caporale)
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
 
Journée ASIT VD 2014 - session 2
Journée ASIT VD 2014 - session 2Journée ASIT VD 2014 - session 2
Journée ASIT VD 2014 - session 2
 
C4021 Séance 8: Réseaux Sociaux
C4021 Séance 8: Réseaux SociauxC4021 Séance 8: Réseaux Sociaux
C4021 Séance 8: Réseaux Sociaux
 

Similaire à Esempi di AOP (Gian Maria Ricci)

Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Mauro Servienti
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Codemotion fuse presentation
Codemotion fuse presentationCodemotion fuse presentation
Codemotion fuse presentationUgo Landini
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheMauro Servienti
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 
Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Fabio Armani
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDDotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 
Come testare la resilienza della mia applicazione al fallimento di una zona d...
Come testare la resilienza della mia applicazione al fallimento di una zona d...Come testare la resilienza della mia applicazione al fallimento di una zona d...
Come testare la resilienza della mia applicazione al fallimento di una zona d...Giuseppe Borgese
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSNucleode Srl
 

Similaire à Esempi di AOP (Gian Maria Ricci) (20)

Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Codemotion fuse presentation
Codemotion fuse presentationCodemotion fuse presentation
Codemotion fuse presentation
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarche
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Kubernetes Core Concepts
Kubernetes Core ConceptsKubernetes Core Concepts
Kubernetes Core Concepts
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Thread
ThreadThread
Thread
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Come testare la resilienza della mia applicazione al fallimento di una zona d...
Come testare la resilienza della mia applicazione al fallimento di una zona d...Come testare la resilienza della mia applicazione al fallimento di una zona d...
Come testare la resilienza della mia applicazione al fallimento di una zona d...
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACS
 
Introduzione A Docker
Introduzione A DockerIntroduzione A Docker
Introduzione A Docker
 

Plus de DotNetMarche

Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...DotNetMarche
 
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...DotNetMarche
 
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyondDotNetMarche
 
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)DotNetMarche
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in ActionDotNetMarche
 
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningDotNetMarche
 
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewDotNetMarche
 
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvcDotNetMarche
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC FrameworkDotNetMarche
 
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpaceDotNetMarche
 
Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)DotNetMarche
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)DotNetMarche
 
NHibernate in Action (Parte 2)
NHibernate in Action (Parte 2)NHibernate in Action (Parte 2)
NHibernate in Action (Parte 2)DotNetMarche
 
Source control system
Source control systemSource control system
Source control systemDotNetMarche
 

Plus de DotNetMarche (18)

Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
 
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
 
WPF 4 fun
WPF 4 funWPF 4 fun
WPF 4 fun
 
WPF basics
WPF basicsWPF basics
WPF basics
 
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyond
 
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)
 
jQuery Loves You
jQuery Loves YoujQuery Loves You
jQuery Loves You
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-Learning
 
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical Overview
 
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
 
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpace
 
Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
 
Esempi pratici
Esempi praticiEsempi pratici
Esempi pratici
 
NHibernate in Action (Parte 2)
NHibernate in Action (Parte 2)NHibernate in Action (Parte 2)
NHibernate in Action (Parte 2)
 
Source control system
Source control systemSource control system
Source control system
 

Esempi di AOP (Gian Maria Ricci)

  • 2. Chi sono?? • Ricci Gian Maria • Alkampfer@nablasoft.com • Twitter: @alkampfer • Blog: http://www.codewrecks.com
  • 3. 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.
  • 4. 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
  • 5. 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)
  • 6. 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).
  • 7. RUN TIME WEAVING CON DECORATOR PATTERN
  • 8. 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.
  • 9. 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
  • 10. Decorator pattern La chiamata viene intercettata e viene semplicemente propagata al RealSubject
  • 11. DEMO
  • 12. Decorator pattern • Implementazione semplice ma poco riutilizzabile.
  • 13. RUN TIME WEAVING CON CASTLE WINDSOR
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. DEMO
  • 18. AOP SU SERVIZI WCF CON CASTLE WINDSOR
  • 19. 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.
  • 20. 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.
  • 21. DEMO
  • 22. 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)