SlideShare une entreprise Scribd logo
1  sur  22
29ª Reunião Lisboa - 26/05/2012      http://netponto.org




                                  AOP - Postsharp
                                          Vítor Paulino
Patrocinador “GOLD”
Patrocinadores “Silver”
Vítor Paulino
Consultor Novabase
      .NET Developer
Senior developer IBT
       .NET Developer
Agenda
•   AOP
•   Caracteristicas Postsharp
•   Demo - Taking a tour
•   Aspectos
•   Lifetime & scope
•   Demos
AOP

“ In computing, aspect-oriented programming (AOP) is
a programming paradigm which aims to increase modularity by
allowing the separation of cross-cutting concerns. “
                                                wikipedia
AOP Conceitos
PostSharp - Aspectos
• Aspectos Base
• Aspectos Multicast
• Aspectos Providers
Aspectos Base
• AssemblyLevelAspect
  – classe base para todos os aspectos aplicados a assemblies
• TypeLevelAspect
  – classe base para todos os aspectos aplicados a tipos
• MethodLevelAspect
  – classe base para todos os aspectos aplicados a métodos
• LocationLevelAspect
  – Classe base de todos os aspectos aplicados a campos ou
    parâmetros de métodos
• EventLevelAspect
  – classe base para todos os aspectos aplicados a eventos
Aspectos Multicast
 – MulticastAttributes:
    •   visibility,
    •   virtuality,
    •   implementation,
    •   scope.
 – AttributeTargetTypes:
    • Nome Completo
    • Wildmask
    • RegularExpressions
 – AttributePriority : Valor da prioridade de aplicação do
   aspecto, quanto mais baixo o valor mais prioritário
Aspectos Providers
• IAspectProvider
 –Aplicação de aspectos
  programaticamente
 • CustomAttributeIntroductionAspect
• Demo 1
 Postsharp – Taking a tour
Pós-Compilação
           MSIL Injection


                                  CompileTimeInitialize
       Inicialização em compile
                  time            CompileTimeValidate




                                     RunTimeInitialize
       Inicialização em runtime
Pós-Compilação
1. Obter a metadata do módulo.
2. Traduzir as instruções IL para um formato
   relevante para o processo de weave
   conseguir interpretar.
3. Detectar os Joinpoints ( code weaver task ).
4. Tratamento explicito para os Aspectos
   associados ao tratamento de excepções.
5. Injectar as instruções IL dos advices.
6. Voltar a compilar de novo o modulo.
Tempo de vida
                                     Tempo de vida igual ao da aplicação
 Static Scoped Aspect
                                     Por Default !
                  At Compile Time




                                     Tempo de vida igual ao da instância
 Instance Scoped Aspect
                                     alvo
                        At runtime   • IInstanceScopedAspect
                                     •InstanceLevelAspect
• Demo
Lifetime & Scope
Conclusões
• Agnostico à linguagem de programação
• MSIL Injection
• Facil utilização
• Aplicação a todos os tipos de join
  points do .NET
• Codigo gerado – dificil leitura
Referências
Site do Postsharp
   – http://www.sharpcrafters.com/postsharp/documentation
Patrocinador “GOLD”
Patrocinadores “Silver”
Próximas reuniões presenciais
• 26-05-2012 – Maio
• 02-06-2012 – Junho (Coimbra)
• 16-06-2012 – Junho
• 21-07-2012 – Julho

Reserva estes dias na agenda! :)
Obrigado!
Vítor Paulino
vmlepaulino@gmail.com

Contenu connexe

Similaire à Aspect-oriented Programming (AOP) com PostSharp

Introdução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisIntrodução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reais
Michel Graciano
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Comunidade NetPonto
 
Visual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NETVisual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NET
Fernando Henrique
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
jamersonlima
 

Similaire à Aspect-oriented Programming (AOP) com PostSharp (20)

Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
347842.ppt
347842.ppt347842.ppt
347842.ppt
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Um método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosUm método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviços
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
 
Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0
 
Rational Unfied Process
Rational Unfied ProcessRational Unfied Process
Rational Unfied Process
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
 
Introdução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisIntrodução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reais
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5) - Virtual Develo...
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidades
 
Visual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NETVisual Studio Summit 2014 - Profiling de Aplicações .NET
Visual Studio Summit 2014 - Profiling de Aplicações .NET
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Microservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesMicroservices em Python: desafios e soluções
Microservices em Python: desafios e soluções
 

Plus de Comunidade NetPonto

Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Comunidade NetPonto
 

Plus de Comunidade NetPonto (20)

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara Silva
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo Costa
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno Cancelo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
ASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco GodoiASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco Godoi
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor Tomaz
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto Ferrari
 

Dernier

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Dirceu Resende
 

Dernier (9)

[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
O futuro e o impacto da tecnologia nas salas de aulas
O futuro e o impacto da tecnologia  nas salas de aulasO futuro e o impacto da tecnologia  nas salas de aulas
O futuro e o impacto da tecnologia nas salas de aulas
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
Apostila e caderno de exercicios de WORD
Apostila e caderno de exercicios de  WORDApostila e caderno de exercicios de  WORD
Apostila e caderno de exercicios de WORD
 
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 

Aspect-oriented Programming (AOP) com PostSharp

  • 1. 29ª Reunião Lisboa - 26/05/2012 http://netponto.org AOP - Postsharp Vítor Paulino
  • 4. Vítor Paulino Consultor Novabase .NET Developer Senior developer IBT .NET Developer
  • 5. Agenda • AOP • Caracteristicas Postsharp • Demo - Taking a tour • Aspectos • Lifetime & scope • Demos
  • 6. AOP “ In computing, aspect-oriented programming (AOP) is a programming paradigm which aims to increase modularity by allowing the separation of cross-cutting concerns. “ wikipedia
  • 8. PostSharp - Aspectos • Aspectos Base • Aspectos Multicast • Aspectos Providers
  • 9. Aspectos Base • AssemblyLevelAspect – classe base para todos os aspectos aplicados a assemblies • TypeLevelAspect – classe base para todos os aspectos aplicados a tipos • MethodLevelAspect – classe base para todos os aspectos aplicados a métodos • LocationLevelAspect – Classe base de todos os aspectos aplicados a campos ou parâmetros de métodos • EventLevelAspect – classe base para todos os aspectos aplicados a eventos
  • 10. Aspectos Multicast – MulticastAttributes: • visibility, • virtuality, • implementation, • scope. – AttributeTargetTypes: • Nome Completo • Wildmask • RegularExpressions – AttributePriority : Valor da prioridade de aplicação do aspecto, quanto mais baixo o valor mais prioritário
  • 11. Aspectos Providers • IAspectProvider –Aplicação de aspectos programaticamente • CustomAttributeIntroductionAspect
  • 12. • Demo 1 Postsharp – Taking a tour
  • 13. Pós-Compilação MSIL Injection CompileTimeInitialize Inicialização em compile time CompileTimeValidate RunTimeInitialize Inicialização em runtime
  • 14. Pós-Compilação 1. Obter a metadata do módulo. 2. Traduzir as instruções IL para um formato relevante para o processo de weave conseguir interpretar. 3. Detectar os Joinpoints ( code weaver task ). 4. Tratamento explicito para os Aspectos associados ao tratamento de excepções. 5. Injectar as instruções IL dos advices. 6. Voltar a compilar de novo o modulo.
  • 15. Tempo de vida Tempo de vida igual ao da aplicação Static Scoped Aspect Por Default ! At Compile Time Tempo de vida igual ao da instância Instance Scoped Aspect alvo At runtime • IInstanceScopedAspect •InstanceLevelAspect
  • 17. Conclusões • Agnostico à linguagem de programação • MSIL Injection • Facil utilização • Aplicação a todos os tipos de join points do .NET • Codigo gerado – dificil leitura
  • 18. Referências Site do Postsharp – http://www.sharpcrafters.com/postsharp/documentation
  • 21. Próximas reuniões presenciais • 26-05-2012 – Maio • 02-06-2012 – Junho (Coimbra) • 16-06-2012 – Junho • 21-07-2012 – Julho Reserva estes dias na agenda! :)

Notes de l'éditeur

  1. separation o cross cutting concernsaspectadvice PointcutJoinpointsweavingAspect: definição do aspectAdvice: definição do que é que se pretende executarJoinpoints: locais onde se injecta o codigo do advice do aspectoPointcut: joinpoints[]
  2. Adicionar o aspecto ao assembly e ver a aplicação a estoirar ! Stack overflow !! We can't build the project because PostSharp is trying to apply our aspect to our aspect. The result of this, at least in this case, would be a stack overflowAttributeTargetTypes ( string onde se preenche o nomecompleto to tipo )
  3. [MulticastAttributeUsage(MulticastTargets.Field | MulticastTargets.Property, TargetMemberAttributes = MulticastAttributes.Public | MulticastAttributes.Instance)] public sealed class AddXmlIgnoreAttribute : MethodLevelAspect, IAspectProvider{ private static readonlyCustomAttributeIntroductionAspectcustomAttributeIntroductionAspect = new CustomAttributeIntroductionAspect( new ObjectConstruction(typeof(XmlIgnoreAttribute).GetConstructor(Type.EmptyTypes))); public IEnumerable<AspectInstance> ProvideAspects(object targetElement) { MemberInfomemberInfo = (MemberInfo)targetElement; if (memberInfo.IsDefined(typeof(XmlElementAttribute), false) || memberInfo.IsDefined(typeof(XmlAttributeAttribute), false)) yield break; yield return new AspectInstance(targetElement, customAttributeIntroductionAspect); }}
  4. Referenciar um projecto com postsharpMostrar o assembly e espaço de nomesCriar um aspecto OnMethodBoundoryAspectMostrar os métodos que podemos fazer overrideParametrosCompilar – Alertar para o popup do executavel que fez as coisas... Mostrar o ILSpy
  5. Compile time weavingLet the standard compiler do its job, then read the compiled assembly, modify it and write it back. This is the approach of PostSharp.msBuild: MSBUILD: Este ficheiro : C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Microsoft.Common.targetsDa indicação que deve ser carregado o ficheiro :  c:\\Program Files\\MSBuild\\v2.0\\Custom.After.Microsoft.Common.targetsFicheiro este que é alterado pelos executaveis que pretendem executar tarefas após o build. O Post sharp edita-o com a informação das tarefas a executar após o build
  6. Para os aspectos normais : Aspect for each targetPara os aspectos que implementem IInstanceScopedAspect,Return this.MemberwiseClone()nainvocação do CreateInstance(AdviceArgsadviceArgs) da interface IInstanceScopedAspect
  7. The reasons why I chose post-compilation when designing PostSharp 5 years ago are:Language agnosticism.MSIL has stabler specifications compared to high-level languages (which have non-trivial updates every second year).Most of the time, MSIL is the level of abstraction you need when dealing with aspects. You don't need to know all the equivalent constructs (think f 'using' and 'try-finally').Before 2008, nobody has succeeded in producing a decent C# compiler. The difficulties met by Mono were impressive enough, even if they have caught up now.Dealing with binary seemed much faster than dealing with source code.Dealing with a binary assembly makes it possible to execute it -- the assembly being processed can transforme itself. It was unheard before PostSharp Laos was first released.