• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
 

DNAD 2009 - Injeção de Dependência (por Leandro Daniel)

on

  • 2,251 views

Palestra de Leandro Daniel no .Net Architects Day 2009 sobre injeção de dependência com o Unity.

Palestra de Leandro Daniel no .Net Architects Day 2009 sobre injeção de dependência com o Unity.

Statistics

Views

Total Views
2,251
Views on SlideShare
1,970
Embed Views
281

Actions

Likes
1
Downloads
22
Comments
0

8 Embeds 281

http://reverb.leandrodaniel.com 172
http://www.leandrodaniel.com 52
http://leandrodaniel.com 46
http://www.slideshare.net 4
http://www.linkedin.com 4
http://static.slideshare.net 1
http://www.reverb.leandrodaniel.com 1
http://equalizer.leandrodaniel.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    DNAD 2009 - Injeção de Dependência (por Leandro Daniel) DNAD 2009 - Injeção de Dependência (por Leandro Daniel) Presentation Transcript

    • Injeção de Dependência
      Leandro Daniel
      MCAD, MCSD, CSM
      Utilizando injeção de dependência com o Unity
    • Agenda
      Contexto de utilização
      O padrão de injeção de dependência
      Apresentando o Unity Application Block
      Entendendo métricas de acoplamento
      Demonstração
      Dúvidas
    • Contexto de utilização
    • Era uma vez...
    • No início...
      !
      Dev1
      Dev2
      Dev3
    • Contornando...
      Dev2
      Dev1
      ?
      Dev3
      MethodStub
      ConsoleLogger
      Tester
    • Classe pronta...
      !
      Dev2
      Dev1
      Dev3
      MethodStub
      ConsoleLogger
    • Mudanças acontecem...
      !!
      Dev2
      Dev1
      ??
      Dev3
      Tester
    • Mudanças acontecem, sempre...
      Dev2
      !!!
      ...
      Dev1
      Dev3
      ???
      @#$!
      Tester
    • Um provável cenário...
      Dev2
      Dev1
      Dev3
      Alto acoplamento!
    • Resumindo
      Classes com alto acoplamento dificultam a manutenção e testabilidade (podem dificultar o desenvolvimento)
      Alterações em classes com acoplamento aferente impactam as classes dependentes (e vice-versa)
      Dependências complexas são difíceis de gerenciar
      Deixar a aplicação plugável e flexível em geral requer prática (ou um framework)
    • Lembre-se
      coesão ≠ acoplamento
    • Algumas técnicas disponíveis
      Abstract Factory Pattern
      Builder Pattern
      Service Locator Pattern
      IoC - Inversion of Control Pattern
      DI - Dependency Injection Pattern
      Programe para uma interface
      e não para uma implementação
    • O padrão de Injeção de Dependência
    • Design Patternspodem ajudar...
    • Uma técnica para desacoplamento de classes (um caso particular de IoC)
      Baseado em um builder responsável pela construção de outros objetos
      Comumente, apresenta-se sob as três formas:
      Interface Injection
      Setterinjection
      Constructorinjection
      Utiliza um container para armazenamento de objetos
      O que é?
    • SL e DI (IoC)
    • Origem
      Martin Fowler, popularizou o termo Injeção de Dependência como uma forma de Inversão de Controle
    • “Padronizar um conjunto de notações consistentes e não controverso que permita que classes injetáveis possam ser portadas entre os vários frameworks.”
      Fonte:
      http://tinyurl.com/diinfoq(InfoQ- notícias, CraigWickesser)
    • Pico Container http://www.picocontainer.org
      Spring Frameworks (Spring.NET) http://www.springframework.org
      Guice
      http://code.google.com/p/google-guice
      Castle Windsor (MicroKernel)
      http://www.castleproject.org
      Alguns frameworks...
    • Meus objetos e classes possuem dependência de outros objetos?
      Minhas dependências são complexas e requerem abstração?
      Injetar dependência na construção ou na chamada de objetos traz alguma vantagem?
      Preciso gerenciar o tempo de vida dos meus objetos?
      Preciso configurar as dependências dos meus objetos por meio de um arquivo de configuração?
      Preciso manter um cache das minhas dependências numa aplicação Web?
      Quando devo utilizar?
    • As dependências forem muito simples
      Faltam boas práticas básicas
      As interfaces não podem ser definidas com clareza
      Não existe ganho na utilização de containers
      Repense a utilização se...
      O ideal não existe...
    • E o arquiteto?
    • Tomando decisões

      A aplicação de DI pode representar um risco levando em consideração o skill da equipe?
      A empresa tem como cultura a prática de testes (TDD ou qualquer outra técnica)?
      Se a aplicação não tem previsão de vida longa vale a pena aplicar DI?
      • Eu consigo aumentar o skill da minha equipe aplicando nova técnica?
      • Eu consigo mostrar os benefícios de praticarmos TDD já que DI nos propicia isso mais facilmente?
      • Eu consigo comprovar que os custos com manutenção serão menores se empregarmos melhores técnicas agora, ainda que isso onere um pouco mais o projeto?
    • Unity Application Block
    • Cross-cuttingconcernse algo mais...
    • Unity Application Block
      Fev/2008
      • Lançado o CTP do Unity
      • http://www.codeplex.com/unity
      Abr/2008
      • Lançada a versão 1.0
      Mai/2008
      • Unity é incorporado a Enterprise Library 4.0
      • Continua com a opção de instalação separada
      Out/2008
      • Atualizada juntamente com a Enterprise Library 4.1
      • Versão separada atualizada para 1.2
      Dez/2008
      • Port do Unity para Silverlight
      Chris Tavares
    • Unity Application Block
      Possibilita construir instâncias de objetos contendo dependência entre eles
      Expõe um método chamado RegisterType que suporta a configuração do container com o mapeamento dos objetos (interface  classe concreta)
      Expõe o método Resolve que retorna as instâncias dos métodos construídos com todas as suas dependências resolvidas
    • Unity Application Block
      Provê injeção de dependência para interfaces e construtores de classes por meio de atributos nas propriedades e métodos
      Hierarquia de containers
      Configuração em arquivos XML
      Lifetime Manager
    • Constructor Injection
    • Setter Injection
    • Unity Application Block
      Simples
      Extensível
      Código-fonte disponível
      AOP
    • Unity Application Block
      Cuidado com a
      referência circular!
    • Métricas de acoplamento
    • Como medir as dependências?
      Exemplo:
      Código
      morto
      Exemplo:
      Problemas
      de design
      Fonte:
      http://tinyurl.com/couplingmetrics (CodeBetter - artigo de Patrick Smacchia, MVP C#)
    • Quanta dependência mesmo?
    • Demonstração
    • Unity Application Blockhttp://www.codeplex.com/unity
      Enterprise Library
      http://www.codeplex.com/entlib
      NDependhttp://www.ndepend.com/
      Downloads
    • IoC Containers and the Dependency Injection pattern(Martin Fowler, 2004)http://www.martinfowler.com/articles/injection.html
      Enterprise Library Contribhttp://entlibcontrib.codeplex.com/
      Exemploscomplementareshttp://reverb.leandrodaniel.com/category/Enterprise-Library.aspx
      Artigo na revista .net Magazine 62
      Referências
    • Designing Reusable Classes (Ralph Johnson & Brian Foote, 1988)
      http://www.laputan.org/drc/drc.html
      Inversion of Control(Martin Fowler, 2005)http://martinfowler.com/bliki/InversionOfControl.html
      javax.inject.Inject(Google Code)http://tinyurl.com/ceaknx
      Referências
    • Dúvidas
    • Obrigado!Até o DNAD 2010!
      Leandro Daniel
      contato@leandrodaniel.com
      http://reverb.leandrodaniel.com
      Twitter: @leandronet