SlideShare ist ein Scribd-Unternehmen logo
1 von 42
AOP
&
@bolognabruno
@fabifernandez23
Agenda
•
•
•
•
•
•
•
•

¿Que es el mal diseño?
¿Que es AOP?
¿Como funciona AOP?
Tipos AOP
Postsharp
Vida de un aspecto
Out of the Box Aspects
Consideraciones con Postsharp
¿Que es el mal diseño?
• Recordemos momentos que nos vimos
enfrentados a código mal diseñado.
• Analicemos que características hacen que el
código no sea bueno.
¿Que es el mal diseño?
Dificultades de un mal diseño
• Muy difícil modificar código sin introducir
nuevos bugs.
• Por más que se corrijan bugs, el mal diseño se
mantiene y cada vez tiende a ser peor
Arreglar algo mal diseñado...
Ejemplo de código - MeetupApp
Un pequeño análisis
• Por cada bloque de código que queremos
encerrar en try/catch estamos utilizando al
menos 8 líneas más de código.
A la hora de crecer...
• 10 métodos que encierran código en bloques
try/catch representarían al menos 80 líneas de
código repetido
Esto no es nuevo...
• Un estudio publicado por IEEE TRANSACTIONS ON
SOFTWARE ENGINEERING demostró que la cantidad
de defectos en una funcionalidad están relacionadas
en dos factores:
1. La cantidad de lineas de código que componen
dicha funcionalidad .
2. La repetición de dicha funcionalidad a traves de
varios artefactos de código.
Ademas...
• También demostró que las responsabilidades
"cross-cutting" repetidas en la aplicación
suelen tener más defectos que las clásicas
funcionalidades de negocio.
¿Que es AOP?
• AOP es una técnica de desarrollo de software
que apunta a incrementar la modularidad
permitiendo separación de responsabilidades
"cross-cutting".
• Esta técnica complementa y no remplaza el
paradigma actual de programación orientada
a objetos.
¿Que es AOP?
• Con AOP podemos definir funcionalidad
"cross-cutting" en un único lugar y aplicarla
declarativamente donde sea necesario sin
modificar la clase donde aplica esta
funcionalidad.
Responsabilidades cross-cutting
•
•
•
•
•
•

Logging
Auditoria
Transacciones
Locking & thread dispatching
Caching
Exception handling
Principios que cumple AOP
• DRY (Don't Repeat Yourself)
• Principios SOLID
•
Single Responsibility
•
OPEN/CLOSE
¿Como funciona AOP?
Identificamos responsabilidades CrossCutting
Creamos un aspecto para dicha
responsabilidad
Aplicamos el aspecto a nuestras clases
Tipos AOP
Interceptors
• Usa el patrón DynamicProxy
• Se resuelve en tiempo de ejecución
IL Code Weaving
• Inyecta código en tiempo de compilación
• No usan DynamicProxy
Interceptors
IL Code Weaving
Comparación de frameworks
Features de cada framework
De que forma podemos aplicar
aspectos
Otros puntos importantes
http://postsharp.net
Vida de un Aspecto
• Compila tu assembly
• Entra PostSharp a jugar:
– Se instancia el aspecto para el target code
– CompileTimeValidation
– CompileTimeInitialization
– Serialización por target code
• Managed resource
– Binary stream (default)
– XML
– MSIL

Compile
Time
Vida de un Aspecto
• Run Time
– Deserialización
– RunTimeInitialize (1 vez – la app está lista)
– RunTimeInstanceInitialize (cada vez que el target
code se inicializa)
– Ejecución del advice

• Ctor() no se ejecuta en Run Time
OnMethodBoundaryAspect
• Aspecto a nivel de método
– OnEntry
– OnExit
– OnException
– OnSuccess
OnExceptionAspect
• Aspecto a nivel de método
– OnException
– GetExceptionType
LocationInterceptionAspect
• Aspecto a nivel de propiedades y campos
• Permite interceptar Get y Set
– OnGetValue
– OnSetValue

• Operaciones útiles
– ProceedGetValue()
– ProceedSetValue()
– GetCurrentValue()
– SetNewValue()
EventInterceptionAspect
• Aspecto a nivel de eventos
– OnAddHandler (+=)
– OnRemoveHandler(-=)
– OnInvokeHandler

• Operaciones útiles
– ProceedAddHandler()
– ProceedRemoveHandler()
Aplicando P# a codigo existente
• Buscar código que sea claramente un patrón
decorador
• Buscar aspectos que no interactuen con el target
code
• Elegir la mejor forma de agregarlos: multicast o
atributos individuales
– Individual = más control
– Multicast = más fácil pero el código debe estar bien
organizado para tener control

• TEST, TEST, TEST!
Aplicando P# a codigo existente
• Verificar que no hay efectos secundarios
– Considerar los aspectos como islas de alta
encapsulación
– Sólo lectura de la meta data del target code
– No intentar alterar el flujo de ejecución
Aplicando P# a codigo existente
• Arrancar con lo más papa!
– Logging & Tracing
– Monitoreo de performance
– Caching
– Exception handling
Deployment
• PostSharp.dll y listo!
• Si usas ILMarge
– Merge de varios assemblies en uno
– Se complica un poco!

• Si firmas los assemblies, usar delay signing
• Obfuscas tu código?
– Sólo soporta dotFuscator
GRACIAS!
Referencias
•
•
•
•
•
•
•

Dynamic Decorator Pattern http://goo.gl/DkIe1t
Dynamic Proxies http://goo.gl/ql6Zly
Documentación PostSharp http://goo.gl/mH3l6J
White-paper AOP http://goo.gl/Mtzy0u
Artículo Técnico PostSharp http://goo.gl/NxD380
Presentaciones AOP http://goo.gl/v6OYmm
Aspect Oriented Programming in .NET
http://goo.gl/HNKlaA
• PostSharp Fundamentals http://goo.gl/LPIawa
• ILSpy http://ilspy.net/

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

TestingAR V - Una Nueva Visión - Federico Toledo - Performance Durante y Des...
TestingAR V - Una Nueva Visión - Federico Toledo - Performance Durante y Des...TestingAR V - Una Nueva Visión - Federico Toledo - Performance Durante y Des...
TestingAR V - Una Nueva Visión - Federico Toledo - Performance Durante y Des...
 
DotNet 2019 | Alberto Varela - Infraestructura como código en Azure
DotNet 2019 | Alberto Varela - Infraestructura como código en AzureDotNet 2019 | Alberto Varela - Infraestructura como código en Azure
DotNet 2019 | Alberto Varela - Infraestructura como código en Azure
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en Java
 
Scrum overview
Scrum overview Scrum overview
Scrum overview
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
Integración y Entrega Continua con Visual Studio Online
Integración y Entrega Continua con Visual Studio OnlineIntegración y Entrega Continua con Visual Studio Online
Integración y Entrega Continua con Visual Studio Online
 
Cómo iniciarme en el mundo de la automatización de pruebas
Cómo iniciarme en el mundo de la automatización de pruebasCómo iniciarme en el mundo de la automatización de pruebas
Cómo iniciarme en el mundo de la automatización de pruebas
 
Testing como parte de la cultura DevOps
Testing como parte de la cultura DevOpsTesting como parte de la cultura DevOps
Testing como parte de la cultura DevOps
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Automatizacion de Pruebas
Automatizacion de PruebasAutomatizacion de Pruebas
Automatizacion de Pruebas
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true history
 
Ejecutando pruebas automatizadas desde la nube
Ejecutando pruebas automatizadas desde la nubeEjecutando pruebas automatizadas desde la nube
Ejecutando pruebas automatizadas desde la nube
 
Magallanes - PHPmvd Meet Up - Mayo 2014
Magallanes - PHPmvd Meet Up - Mayo 2014Magallanes - PHPmvd Meet Up - Mayo 2014
Magallanes - PHPmvd Meet Up - Mayo 2014
 
Aug frontend dev ops
Aug frontend dev opsAug frontend dev ops
Aug frontend dev ops
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con Jenkins
 
Proceso desarrollo de fábrica de software
Proceso desarrollo de fábrica de softwareProceso desarrollo de fábrica de software
Proceso desarrollo de fábrica de software
 
Workshop Calabash Appium
Workshop Calabash AppiumWorkshop Calabash Appium
Workshop Calabash Appium
 
Introducción a la automatización de pruebas con tecnologías .Net
Introducción a la automatización de pruebas con tecnologías .NetIntroducción a la automatización de pruebas con tecnologías .Net
Introducción a la automatización de pruebas con tecnologías .Net
 
Clean code 9
Clean code 9Clean code 9
Clean code 9
 

Andere mochten auch (8)

.NET UY Meetup 7 - CLR Memory by Fabian Alves
.NET UY Meetup 7 - CLR Memory by Fabian Alves.NET UY Meetup 7 - CLR Memory by Fabian Alves
.NET UY Meetup 7 - CLR Memory by Fabian Alves
 
.NET UY Meetup 7 - ICBanking Apps by Gonzalo Pelós & Gabriel Monteagudo
.NET UY Meetup 7 - ICBanking Apps by Gonzalo Pelós & Gabriel Monteagudo.NET UY Meetup 7 - ICBanking Apps by Gonzalo Pelós & Gabriel Monteagudo
.NET UY Meetup 7 - ICBanking Apps by Gonzalo Pelós & Gabriel Monteagudo
 
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
 
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
 
.NET UY Meetup 6 - Xamarin: Desarrollando apps nativas para iOS & Android en ...
.NET UY Meetup 6 - Xamarin: Desarrollando apps nativas para iOS & Android en ....NET UY Meetup 6 - Xamarin: Desarrollando apps nativas para iOS & Android en ...
.NET UY Meetup 6 - Xamarin: Desarrollando apps nativas para iOS & Android en ...
 
.NET UY Meetup 3 - Presentaciones Efectivas by Ariel Erlijman
.NET UY Meetup 3 - Presentaciones Efectivas by Ariel Erlijman.NET UY Meetup 3 - Presentaciones Efectivas by Ariel Erlijman
.NET UY Meetup 3 - Presentaciones Efectivas by Ariel Erlijman
 
Poo 1
Poo 1Poo 1
Poo 1
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 

Ähnlich wie .NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez

DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Jordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Jordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Akamon Engineering
 

Ähnlich wie .NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez (20)

ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2
 
Meetup Oracle Technology MAD_BCN: 6.2 DevOps y DataOps
Meetup Oracle Technology MAD_BCN: 6.2 DevOps y DataOpsMeetup Oracle Technology MAD_BCN: 6.2 DevOps y DataOps
Meetup Oracle Technology MAD_BCN: 6.2 DevOps y DataOps
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 
Practicas tecnicas
Practicas tecnicasPracticas tecnicas
Practicas tecnicas
 
Introducción a la programación orientada a aspectos
Introducción a la programación orientada a aspectosIntroducción a la programación orientada a aspectos
Introducción a la programación orientada a aspectos
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágil
 
Practicas técnicas
Practicas técnicasPracticas técnicas
Practicas técnicas
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Angular Fundamentals
Angular FundamentalsAngular Fundamentals
Angular Fundamentals
 

Kürzlich hochgeladen

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Kürzlich hochgeladen (15)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez

  • 2. Agenda • • • • • • • • ¿Que es el mal diseño? ¿Que es AOP? ¿Como funciona AOP? Tipos AOP Postsharp Vida de un aspecto Out of the Box Aspects Consideraciones con Postsharp
  • 3. ¿Que es el mal diseño? • Recordemos momentos que nos vimos enfrentados a código mal diseñado. • Analicemos que características hacen que el código no sea bueno.
  • 4. ¿Que es el mal diseño?
  • 5. Dificultades de un mal diseño • Muy difícil modificar código sin introducir nuevos bugs. • Por más que se corrijan bugs, el mal diseño se mantiene y cada vez tiende a ser peor
  • 6. Arreglar algo mal diseñado...
  • 7. Ejemplo de código - MeetupApp
  • 8. Un pequeño análisis • Por cada bloque de código que queremos encerrar en try/catch estamos utilizando al menos 8 líneas más de código.
  • 9. A la hora de crecer... • 10 métodos que encierran código en bloques try/catch representarían al menos 80 líneas de código repetido
  • 10. Esto no es nuevo... • Un estudio publicado por IEEE TRANSACTIONS ON SOFTWARE ENGINEERING demostró que la cantidad de defectos en una funcionalidad están relacionadas en dos factores: 1. La cantidad de lineas de código que componen dicha funcionalidad . 2. La repetición de dicha funcionalidad a traves de varios artefactos de código.
  • 11. Ademas... • También demostró que las responsabilidades "cross-cutting" repetidas en la aplicación suelen tener más defectos que las clásicas funcionalidades de negocio.
  • 12. ¿Que es AOP? • AOP es una técnica de desarrollo de software que apunta a incrementar la modularidad permitiendo separación de responsabilidades "cross-cutting". • Esta técnica complementa y no remplaza el paradigma actual de programación orientada a objetos.
  • 13. ¿Que es AOP? • Con AOP podemos definir funcionalidad "cross-cutting" en un único lugar y aplicarla declarativamente donde sea necesario sin modificar la clase donde aplica esta funcionalidad.
  • 15. Principios que cumple AOP • DRY (Don't Repeat Yourself) • Principios SOLID • Single Responsibility • OPEN/CLOSE
  • 18. Creamos un aspecto para dicha responsabilidad
  • 19. Aplicamos el aspecto a nuestras clases
  • 20. Tipos AOP Interceptors • Usa el patrón DynamicProxy • Se resuelve en tiempo de ejecución IL Code Weaving • Inyecta código en tiempo de compilación • No usan DynamicProxy
  • 24. Features de cada framework
  • 25. De que forma podemos aplicar aspectos
  • 27.
  • 29. Vida de un Aspecto • Compila tu assembly • Entra PostSharp a jugar: – Se instancia el aspecto para el target code – CompileTimeValidation – CompileTimeInitialization – Serialización por target code • Managed resource – Binary stream (default) – XML – MSIL Compile Time
  • 30. Vida de un Aspecto • Run Time – Deserialización – RunTimeInitialize (1 vez – la app está lista) – RunTimeInstanceInitialize (cada vez que el target code se inicializa) – Ejecución del advice • Ctor() no se ejecuta en Run Time
  • 31. OnMethodBoundaryAspect • Aspecto a nivel de método – OnEntry – OnExit – OnException – OnSuccess
  • 32. OnExceptionAspect • Aspecto a nivel de método – OnException – GetExceptionType
  • 33. LocationInterceptionAspect • Aspecto a nivel de propiedades y campos • Permite interceptar Get y Set – OnGetValue – OnSetValue • Operaciones útiles – ProceedGetValue() – ProceedSetValue() – GetCurrentValue() – SetNewValue()
  • 34. EventInterceptionAspect • Aspecto a nivel de eventos – OnAddHandler (+=) – OnRemoveHandler(-=) – OnInvokeHandler • Operaciones útiles – ProceedAddHandler() – ProceedRemoveHandler()
  • 35.
  • 36. Aplicando P# a codigo existente • Buscar código que sea claramente un patrón decorador • Buscar aspectos que no interactuen con el target code • Elegir la mejor forma de agregarlos: multicast o atributos individuales – Individual = más control – Multicast = más fácil pero el código debe estar bien organizado para tener control • TEST, TEST, TEST!
  • 37. Aplicando P# a codigo existente • Verificar que no hay efectos secundarios – Considerar los aspectos como islas de alta encapsulación – Sólo lectura de la meta data del target code – No intentar alterar el flujo de ejecución
  • 38. Aplicando P# a codigo existente • Arrancar con lo más papa! – Logging & Tracing – Monitoreo de performance – Caching – Exception handling
  • 39. Deployment • PostSharp.dll y listo! • Si usas ILMarge – Merge de varios assemblies en uno – Se complica un poco! • Si firmas los assemblies, usar delay signing • Obfuscas tu código? – Sólo soporta dotFuscator
  • 40.
  • 42. Referencias • • • • • • • Dynamic Decorator Pattern http://goo.gl/DkIe1t Dynamic Proxies http://goo.gl/ql6Zly Documentación PostSharp http://goo.gl/mH3l6J White-paper AOP http://goo.gl/Mtzy0u Artículo Técnico PostSharp http://goo.gl/NxD380 Presentaciones AOP http://goo.gl/v6OYmm Aspect Oriented Programming in .NET http://goo.gl/HNKlaA • PostSharp Fundamentals http://goo.gl/LPIawa • ILSpy http://ilspy.net/