SlideShare ist ein Scribd-Unternehmen logo
1 von 42
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?  ,[object Object]
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? ,[object Object]
Cross-cuttingconcernse algo mais...
Unity Application Block Fev/2008 ,[object Object]
http://www.codeplex.com/unityAbr/2008 ,[object Object],Mai/2008 ,[object Object]
Continua com a opção de instalação separadaOut/2008 ,[object Object]
Versão separada atualizada para 1.2 Dez/2008 ,[object Object],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

Weitere ähnliche Inhalte

Was ist angesagt?

Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java BásicoPaloma Costa
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Modularização em java com osgi
Modularização em java com osgiModularização em java com osgi
Modularização em java com osgiFilipe Portes
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoRegis Machado
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Design patterns e tecnologias para modularização em java tdc2014
Design patterns e tecnologias para modularização em java tdc2014Design patterns e tecnologias para modularização em java tdc2014
Design patterns e tecnologias para modularização em java tdc2014Filipe Portes
 
Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Manoel Campos da Silva Filho
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Poo1 aula 1 - java - história e introdução
Poo1   aula 1 - java -  história e introduçãoPoo1   aula 1 - java -  história e introdução
Poo1 aula 1 - java - história e introduçãoDenis Sobrenome
 

Was ist angesagt? (12)

LWUIT - Just Java2008
LWUIT - Just Java2008LWUIT - Just Java2008
LWUIT - Just Java2008
 
Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java Básico
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Modularização em java com osgi
Modularização em java com osgiModularização em java com osgi
Modularização em java com osgi
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Design patterns e tecnologias para modularização em java tdc2014
Design patterns e tecnologias para modularização em java tdc2014Design patterns e tecnologias para modularização em java tdc2014
Design patterns e tecnologias para modularização em java tdc2014
 
Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Poo1 aula 1 - java - história e introdução
Poo1   aula 1 - java -  história e introduçãoPoo1   aula 1 - java -  história e introdução
Poo1 aula 1 - java - história e introdução
 

Andere mochten auch

Andere mochten auch (20)

Admin Guru
Admin GuruAdmin Guru
Admin Guru
 
Supatra 53011213099
Supatra 53011213099Supatra 53011213099
Supatra 53011213099
 
Folheto
FolhetoFolheto
Folheto
 
Cristian uba mg
Cristian uba mgCristian uba mg
Cristian uba mg
 
20110612 deia scuba wop
20110612 deia scuba wop20110612 deia scuba wop
20110612 deia scuba wop
 
Natacion
NatacionNatacion
Natacion
 
Marambaia iv area privativa
Marambaia iv   area privativaMarambaia iv   area privativa
Marambaia iv area privativa
 
IAB - Digital Morning Mobile - Mobility Index 2014
IAB - Digital Morning Mobile - Mobility Index 2014IAB - Digital Morning Mobile - Mobility Index 2014
IAB - Digital Morning Mobile - Mobility Index 2014
 
Holiday list 2011-'12
Holiday list 2011-'12Holiday list 2011-'12
Holiday list 2011-'12
 
A MIDIA POR TRÁZ DA MANCHETE.
A MIDIA POR TRÁZ DA MANCHETE.A MIDIA POR TRÁZ DA MANCHETE.
A MIDIA POR TRÁZ DA MANCHETE.
 
Triptico uci 2011
Triptico uci 2011Triptico uci 2011
Triptico uci 2011
 
Ofertasocorrista2011
Ofertasocorrista2011Ofertasocorrista2011
Ofertasocorrista2011
 
原稿用紙[絶対読取専用!]
原稿用紙[絶対読取専用!]原稿用紙[絶対読取専用!]
原稿用紙[絶対読取専用!]
 
Como Comprar No Exterior
Como Comprar No ExteriorComo Comprar No Exterior
Como Comprar No Exterior
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Luismi y lorki tema 2
Luismi y lorki tema 2Luismi y lorki tema 2
Luismi y lorki tema 2
 
Benito lertxundi
Benito lertxundiBenito lertxundi
Benito lertxundi
 
CriançAs De Rua
CriançAs De RuaCriançAs De Rua
CriançAs De Rua
 
Formação Tic
Formação TicFormação Tic
Formação Tic
 
Lombalgia_no_desporto
Lombalgia_no_desportoLombalgia_no_desporto
Lombalgia_no_desporto
 

Ähnlich wie Injeção de Dependência com Unity

Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeGlobalcode
 
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Getúlio Strapazzon
 
Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4Luciano Condé
 
Apresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadasApresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadasVictor Aldir
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Renato Groff
 
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016Renato Groff
 
RedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programadorRedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programadorComunidade NetPonto
 
Arquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHArquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHHugo Ferreira
 
Vue.js - o framework progressivo
Vue.js - o framework progressivoVue.js - o framework progressivo
Vue.js - o framework progressivoVinicius Reis
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) Grupo Treinar
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Renato Groffe
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrThiago Boufleuhr
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1César Augusto Pessôa
 

Ähnlich wie Injeção de Dependência com Unity (20)

Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto Globalcode
 
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
 
Aula1
Aula1Aula1
Aula1
 
Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4
 
Apresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadasApresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadas
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
 
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
 
RedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programadorRedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programador
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Arquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHArquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BH
 
Vue.js - o framework progressivo
Vue.js - o framework progressivoVue.js - o framework progressivo
Vue.js - o framework progressivo
 
Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
 

Mehr von Leandro Daniel

TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaLeandro Daniel
 
TDC 2012 - Métricas de código na arquitetura
TDC 2012 - Métricas de código na arquiteturaTDC 2012 - Métricas de código na arquitetura
TDC 2012 - Métricas de código na arquiteturaLeandro Daniel
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoLeandro Daniel
 
QConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionáriaQConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionáriaLeandro Daniel
 
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaTDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaLeandro Daniel
 
TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?Leandro Daniel
 
DNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura EvolucionáriaDNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura EvolucionáriaLeandro Daniel
 
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...Leandro Daniel
 
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)Leandro Daniel
 

Mehr von Leandro Daniel (9)

TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre Arquitetura
 
TDC 2012 - Métricas de código na arquitetura
TDC 2012 - Métricas de código na arquiteturaTDC 2012 - Métricas de código na arquitetura
TDC 2012 - Métricas de código na arquitetura
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
 
QConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionáriaQConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionária
 
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaTDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
 
TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?
 
DNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura EvolucionáriaDNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura Evolucionária
 
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
 
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
 

Injeção de Dependência com Unity

  • 1. Injeção de Dependência Leandro Daniel MCAD, MCSD, CSM Utilizando injeção de dependência com o Unity
  • 2. 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
  • 5. No início... ! Dev1 Dev2 Dev3
  • 6. Contornando... Dev2 Dev1 ? Dev3 MethodStub ConsoleLogger Tester
  • 7. Classe pronta... ! Dev2 Dev1 Dev3 MethodStub ConsoleLogger
  • 8. Mudanças acontecem... !! Dev2 Dev1 ?? Dev3 Tester
  • 9. Mudanças acontecem, sempre... Dev2 !!! ... Dev1 Dev3 ??? @#$! Tester
  • 10. Um provável cenário... Dev2 Dev1 Dev3 Alto acoplamento!
  • 11. 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)
  • 12. Lembre-se coesão ≠ acoplamento
  • 13. 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
  • 14. O padrão de Injeção de Dependência
  • 16. 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 é?
  • 17. SL e DI (IoC)
  • 18. Origem Martin Fowler, popularizou o termo Injeção de Dependência como uma forma de Inversão de Controle
  • 19. “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)
  • 20. 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...
  • 21. 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?
  • 22. 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...
  • 24.
  • 25. Eu consigo mostrar os benefícios de praticarmos TDD já que DI nos propicia isso mais facilmente?
  • 26.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. 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
  • 33. 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
  • 36. Unity Application Block Simples Extensível Código-fonte disponível AOP
  • 37. Unity Application Block Cuidado com a referência circular!
  • 39. 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#)
  • 42. Unity Application Blockhttp://www.codeplex.com/unity Enterprise Library http://www.codeplex.com/entlib NDependhttp://www.ndepend.com/ Downloads
  • 43. 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
  • 44. 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
  • 46. Obrigado!Até o DNAD 2010! Leandro Daniel contato@leandrodaniel.com http://reverb.leandrodaniel.com Twitter: @leandronet