SlideShare une entreprise Scribd logo
1  sur  50
INVERSÃO DE DEPENDÊNCIA COM
    INVERSÃO DE CONTROLE E
    INJEÇÃO DE DEPENDÊNCIA
Cesar Vilarim

Programador

                  Agilista

 Arquiteto

                 MSDevelop

      Santista
POO        SOLID         IoC/DI



Referências   Dúvidas   Castle.Windsor



 Contatos       FIM
Calma, calma! Não priemos cânico
Vamos do
 começo
O que é
programação
 orientada a
  objetos?
Paradigma de
programação
Forma de ver




      Estilo
Existem
 vários
“estilos”
Classe
Objeto
Estado
Comportamento
Polimorfismo
Polimorfismo
VOCÊS CONHECEM O BOB?
UNCLE BOB (ROBERT C. MARTIN)
• Um dos pais do desenvolvimento ágil
• Conferencista desde 1990.
• Pai dos princípios SOLID, tidos
 hoje como um padrão no Design
 Orientado a Objetos (OOD).
• Autor de diversos livros, entre
 eles: “Clean Code”, “The Clean
 Coder”, “Agile Software
 Development, Principles, Patterns,
 and Practices” e “Agile
 Principles, Patterns, and Practices
 in C#”.
SINGLE RESPONSIBILITY PRINCIPLE (SRP)
“Não deve haver mais do
que UMA razão para uma
classe mudar.”




As classes ou métodos
devem possuir apenas uma
responsabilidade.
A classe que realiza a
movimentação financeira
de uma conta não deve
manipular dados do
usuário, por exemplo.      Só porque você pode, não significa que você deve.
OPEN CLOSED PRINCIPLE (OCP)
“Entidades de software devem
estar abertas para
extensão, mas fechadas para
modificação”




A alteração do comportamento
de uma classe deve ser feita
com a criação de uma
extensão (herança) ou de uma
composição.


                               Não é necessário abrir o peito quando quer um casaco.
LISKOV SUBSTITUTION PRINCIPLE (LSP)
“Métodos que usam referências
para classes base devem
conseguir usar classes derivadas
sem tomar conhecimento disso.”



 Deve ser possível substituir
 uma classe base por suas
 classes derivadas em qualquer
 ponto do código.




                                   Se parece um pato, grasna como um pato, mas precisa de
                                   baterias, provavelmente você tem problemas de abstração.
INTERFACE SEGREGATION PRINCIPLE (ISP)

“Clientes não devem ser obrigados
a depender de interfaces que eles
não usam”.




Mantenha suas interfaces
pequenas e coesas.




                                    Você quer que eu ligue isto, onde?
DEPENDENCY INVERSION PRINCIPLE (DIP)
“Módulos de alto nível não podem
depender de módulos de baixo
nível, ambos devem depender de
abstrações.
Abstrações não devem depender de
detalhes, detalhes devem depender
de abstrações.”




Para que sejam facilmente
reutilizáveis, os módulos devem
possuir um baixo acoplamento
entre si.                           Você solda uma lâmpada diretamente na fiação em uma parede?
DESIGN PATTERNS PARA APLICAR O DIP
 • Abstract Factory Pattern
 • Builder Pattern
 • Service Locator Pattern
 • Dependency Injection Pattern - DI
 • Inversion of Control Pattern - IoC



Martin Fowler popularizou o termo Injeção de Dependência
como uma forma de Inversão de Controle
Porque
 escolher a
Inversão de
 Controle?
CONTEINERES DE DI/IOC




  Castle Windsor
                                        Unity




                        StrucutureMap


       AutoFac
CONTEINERES DE DI/IOC

Gerenciam o uso das
classes, isto é, criação,
destruição, duração e
configuração de instâncias
bem como as dependências
das classes.
Dessa forma nossas classes
de negócio não precisam
criar e configurar as classes
das quais dependem.
Código mais organizado
Now, let’s to code
REFERÊNCIAS
Web – Em inglês - SOLID
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod - Principios de OOD
- SOLID
http://hanselminutes.com/145/solid-principles-with-uncle-bob-robert-c-martin-
Podcast do Scott Hanselman com o Uncle Bob sobre SOLID
http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) – Wikipedia


Web – Em inglês – Castle.Windsor
http://docs.castleproject.org/Windsor.MainPage.ashx - Página oficial do projeto
http://www.castleproject.org/container/gettingstarted/part1/index.html - Exemplo
bem simples de um dos usos.
REFERÊNCIAS
Web – Em inglês
http://blog.objectmentor.com/ - Blog da empresa do Uncle Bob
http://www.hanselman.com/blog/ - Scott Hanselman – Principal Program Manager @
Microsoft
http://weblogs.asp.net/scottgu/ - Scott Guthrie – Corporate Vice President @ Microsoft
Server and Tools division
http://channel9.msdn.com/ - Channel 9 – Videos produzidos pela equipe da Microsoft


Web - Em português
http://blogs.msdn.com/b/wcamb/ - Waldemir Cambiucci – Arquiteto na Microsoft Brasil –
Blog interrompido mas com muito conteúdo legal
http://www.israelaece.com/ - Israel Aece
http://elemarjr.net/ - Elemar Jr. – Um dos melhores blogueiros que já vi.
REFERÊNCIAS
Livros
Cesar Vilarim


E-Mail MSDevelop: cesar.vilarim@msdevelop.com.br
Twitter: http://www.twitter.com/csvilarim
LinkedIn: http://br.linkedin.com/in/cesarvilarim
Facebook: http://www.facebook.com/cesarvilarim
MSN: vilarim97@hotmail.com
Skype: caesarvila

Contenu connexe

Similaire à Inversão de Dependência com DI e IoC

Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elmLucas Teles
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss DanielChristofolli
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíPriscila Mayumi
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Vinicius Pulgatti
 
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....Fabiano Góes
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrThiago Boufleuhr
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileWsdevs Desenvolvedores
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
TDC 2019 Clean Architeture com .net core
TDC 2019  Clean Architeture com .net coreTDC 2019  Clean Architeture com .net core
TDC 2019 Clean Architeture com .net coreRodolfo Fadino Junior
 
Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringHenrique Weissmann
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Danilo Sato
 

Similaire à Inversão de Dependência com DI e IoC (20)

Clean architecture
Clean architectureClean architecture
Clean architecture
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elm
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Software robusto e flexível
Software robusto e flexívelSoftware robusto e flexível
Software robusto e flexível
 
TDC 2019 Clean Architeture com .net core
TDC 2019  Clean Architeture com .net coreTDC 2019  Clean Architeture com .net core
TDC 2019 Clean Architeture com .net core
 
Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com Spring
 
Apres s4
Apres s4 Apres s4
Apres s4
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
 

Inversão de Dependência com DI e IoC

  • 1. INVERSÃO DE DEPENDÊNCIA COM INVERSÃO DE CONTROLE E INJEÇÃO DE DEPENDÊNCIA
  • 2. Cesar Vilarim Programador Agilista Arquiteto MSDevelop Santista
  • 3. POO SOLID IoC/DI Referências Dúvidas Castle.Windsor Contatos FIM
  • 4.
  • 5.
  • 6. Calma, calma! Não priemos cânico
  • 8. O que é programação orientada a objetos?
  • 10. Forma de ver Estilo
  • 12.
  • 13.
  • 18.
  • 19.
  • 20.
  • 21.
  • 24.
  • 25.
  • 27. UNCLE BOB (ROBERT C. MARTIN) • Um dos pais do desenvolvimento ágil • Conferencista desde 1990. • Pai dos princípios SOLID, tidos hoje como um padrão no Design Orientado a Objetos (OOD). • Autor de diversos livros, entre eles: “Clean Code”, “The Clean Coder”, “Agile Software Development, Principles, Patterns, and Practices” e “Agile Principles, Patterns, and Practices in C#”.
  • 28.
  • 29. SINGLE RESPONSIBILITY PRINCIPLE (SRP) “Não deve haver mais do que UMA razão para uma classe mudar.” As classes ou métodos devem possuir apenas uma responsabilidade. A classe que realiza a movimentação financeira de uma conta não deve manipular dados do usuário, por exemplo. Só porque você pode, não significa que você deve.
  • 30. OPEN CLOSED PRINCIPLE (OCP) “Entidades de software devem estar abertas para extensão, mas fechadas para modificação” A alteração do comportamento de uma classe deve ser feita com a criação de uma extensão (herança) ou de uma composição. Não é necessário abrir o peito quando quer um casaco.
  • 31. LISKOV SUBSTITUTION PRINCIPLE (LSP) “Métodos que usam referências para classes base devem conseguir usar classes derivadas sem tomar conhecimento disso.” Deve ser possível substituir uma classe base por suas classes derivadas em qualquer ponto do código. Se parece um pato, grasna como um pato, mas precisa de baterias, provavelmente você tem problemas de abstração.
  • 32. INTERFACE SEGREGATION PRINCIPLE (ISP) “Clientes não devem ser obrigados a depender de interfaces que eles não usam”. Mantenha suas interfaces pequenas e coesas. Você quer que eu ligue isto, onde?
  • 33. DEPENDENCY INVERSION PRINCIPLE (DIP) “Módulos de alto nível não podem depender de módulos de baixo nível, ambos devem depender de abstrações. Abstrações não devem depender de detalhes, detalhes devem depender de abstrações.” Para que sejam facilmente reutilizáveis, os módulos devem possuir um baixo acoplamento entre si. Você solda uma lâmpada diretamente na fiação em uma parede?
  • 34.
  • 35. DESIGN PATTERNS PARA APLICAR O DIP • Abstract Factory Pattern • Builder Pattern • Service Locator Pattern • Dependency Injection Pattern - DI • Inversion of Control Pattern - IoC Martin Fowler popularizou o termo Injeção de Dependência como uma forma de Inversão de Controle
  • 37. CONTEINERES DE DI/IOC Castle Windsor Unity StrucutureMap AutoFac
  • 38. CONTEINERES DE DI/IOC Gerenciam o uso das classes, isto é, criação, destruição, duração e configuração de instâncias bem como as dependências das classes. Dessa forma nossas classes de negócio não precisam criar e configurar as classes das quais dependem.
  • 39.
  • 41.
  • 42.
  • 43.
  • 45.
  • 46.
  • 47. REFERÊNCIAS Web – Em inglês - SOLID http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod - Principios de OOD - SOLID http://hanselminutes.com/145/solid-principles-with-uncle-bob-robert-c-martin- Podcast do Scott Hanselman com o Uncle Bob sobre SOLID http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) – Wikipedia Web – Em inglês – Castle.Windsor http://docs.castleproject.org/Windsor.MainPage.ashx - Página oficial do projeto http://www.castleproject.org/container/gettingstarted/part1/index.html - Exemplo bem simples de um dos usos.
  • 48. REFERÊNCIAS Web – Em inglês http://blog.objectmentor.com/ - Blog da empresa do Uncle Bob http://www.hanselman.com/blog/ - Scott Hanselman – Principal Program Manager @ Microsoft http://weblogs.asp.net/scottgu/ - Scott Guthrie – Corporate Vice President @ Microsoft Server and Tools division http://channel9.msdn.com/ - Channel 9 – Videos produzidos pela equipe da Microsoft Web - Em português http://blogs.msdn.com/b/wcamb/ - Waldemir Cambiucci – Arquiteto na Microsoft Brasil – Blog interrompido mas com muito conteúdo legal http://www.israelaece.com/ - Israel Aece http://elemarjr.net/ - Elemar Jr. – Um dos melhores blogueiros que já vi.
  • 50. Cesar Vilarim E-Mail MSDevelop: cesar.vilarim@msdevelop.com.br Twitter: http://www.twitter.com/csvilarim LinkedIn: http://br.linkedin.com/in/cesarvilarim Facebook: http://www.facebook.com/cesarvilarim MSN: vilarim97@hotmail.com Skype: caesarvila