SlideShare una empresa de Scribd logo
1 de 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/

Más contenido relacionado

La actualidad más candente

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...TestingAR Meetup
 
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 AzurePlain Concepts
 
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 JavaCésar Hernández
 
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 KedaEduard Tomàs
 
.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.0Luis Ruiz Pavón
 
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 OnlineErnesto Cardenas Cangahuala
 
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 pruebasAbel Quintana Lopez
 
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 DevOpsAbel Quintana Lopez
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true historyidealistacreamcode
 
Ejecutando pruebas automatizadas desde la nube
Ejecutando pruebas automatizadas desde la nubeEjecutando pruebas automatizadas desde la nube
Ejecutando pruebas automatizadas desde la nubeAbel Quintana Lopez
 
Magallanes - PHPmvd Meet Up - Mayo 2014
Magallanes - PHPmvd Meet Up - Mayo 2014Magallanes - PHPmvd Meet Up - Mayo 2014
Magallanes - PHPmvd Meet Up - Mayo 2014Andrés Montañez
 
Aug frontend dev ops
Aug frontend dev opsAug frontend dev ops
Aug frontend dev opsMitzi Moncada
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con JenkinsCésar Hernández
 
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 .NetAbel Quintana Lopez
 
Clean code 9
Clean code 9Clean code 9
Clean code 9540deg
 

La actualidad más candente (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
 

Destacado

.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
 
.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
 
.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
 
.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
 
.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
 
.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.NET UY Meetup
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page ApplicationsDiego Cardozo
 

Destacado (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
 

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

Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando softwareGabriel Moral
 
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 ...Miguel Ángel Sánchez Chordi
 
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 - SpanishJordi 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 - SpanishJordi 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 - SpanishAkamon Engineering
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas.. ..
 
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 aspectosTensor
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilJohnny Ordóñez
 
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 agilesJobsket
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webRoberto Sanz Ciriano
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 

Similar a .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
 

Último

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 eyvanamcerpam
 
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.pptxMiguelAtencio10
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
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 JUNITMaricarmen Sánchez Ruiz
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
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 estossgonzalezp1
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
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.pptxAlan779941
 

Último (12)

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
 
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
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
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
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
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
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
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
 

.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/