DIP, IoC, DI, Service Locator e IoC Containers                  Um pouco sobre design de código
Agenda•   DIP - (Dependency Inversion Principle)•   IoC (Inversion of Control)•   DI (Dependency Injection)•   IoC Contain...
Alguns benefícios do que abordaremos• Baixo acoplamento entre classes• Essencial para se fazer testes de unidade (testabil...
Dependency Inversion Principle            Um princípio de design OO                            página 4
DIP – Dependency Inversion Principle• Bob Martin (Uncle Bob)• Criador dos princípios SOLID    • Single responsibility prin...
DIP – Dependency Inversion PrincipleClasses/Modulos de níveis mais altos não devem depender de classes/módulos de níveisma...
DIP – Dependency Inversion PrincipleClasses/Modulos de níveis mais altos não devem depender de classes/módulos de níveisma...
Inversion of ControlFormas de como atingir o DIP                   página 8
Inversion of ControlO que é inversão de controle??Dita quais as formas que podemos atingir o principio de inversão de depe...
Inversion of Control                        Dependency Inversion (Principle)                         Inversion of Control ...
Interface Inversion Não use Interfaces sem saber o porque esta utilizando     IBanana                                     ...
Interface InversionInterfaces devem ter sempre mais de uma implementação ou um planejamento para isso        IFruta       ...
Flow InversionPrograma procedural/sequencial (fluxo definido pelo próprio programa) Programa com GUI, fluxo de entrada ago...
Creation InversionNormalmente criamos nossas classes assim:         var meuObjeto = new MinhaClasse();Criação do objeto é ...
Dependency InjectionUma das maneiras de se inverter o controle                                 página 15
Dependency InjectionÉ um tipo de IoC onde movemos a criação/binding da dependência para fora da classeque necessita de tal...
DEMOnstraçãoDependency Injection           página 17
IoC Containers Framework para DI          página 18
IoC ContainerBasicamente um framework que nos ajuda a fazer DIExistem vários (vários mesmo )• Ninject - http://ninject.or...
DEMOnstraçãoIoC Container com Structure Map                      página 20
Próximos SlideShares
Carregando em…5
×

Inversion ofcontrol

436 visualizações

Publicada em

Apresentação feita para a equipe do Portal Minha Vida (http://www.minhavida.com.br)

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
436
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Inversion ofcontrol

  1. 1. DIP, IoC, DI, Service Locator e IoC Containers Um pouco sobre design de código
  2. 2. Agenda• DIP - (Dependency Inversion Principle)• IoC (Inversion of Control)• DI (Dependency Injection)• IoC Containers página 2
  3. 3. Alguns benefícios do que abordaremos• Baixo acoplamento entre classes• Essencial para se fazer testes de unidade (testabilidade) • Mocks e Stubs• Favorece um design mais flexível e extensível (extensibilidade) • Design plugável (componentização)• Normalmente promove maior reaproveitamento pois evita-se classes “FazTudo” (maior coesão e harmonia nas classes)• Muitos Design Patterns utilizam estes conceitos página 3
  4. 4. Dependency Inversion Principle Um princípio de design OO página 4
  5. 5. DIP – Dependency Inversion Principle• Bob Martin (Uncle Bob)• Criador dos princípios SOLID • Single responsibility principle • Open / closed principle • Liskov substitution principle • Interface segregation principle • Dependency inversion principle• http://www.objectmentor.com/resources/articles/dip.pdf (C++ em 1996)• Ajudou a iniciar toda essa paradinha de “Agile”• Escreveu uns livros legais página 5
  6. 6. DIP – Dependency Inversion PrincipleClasses/Modulos de níveis mais altos não devem depender de classes/módulos de níveismais baixos. Ambas devem depender de abstrações. High Level Class Interface Interface Interface Low Level Class Low Level Class Low Level Class página 6
  7. 7. DIP – Dependency Inversion PrincipleClasses/Modulos de níveis mais altos não devem depender de classes/módulos de níveismais baixos. Ambas devem depender de abstrações. High Level Class Interface Low Level Class Low Level Class Low Level Class página 7
  8. 8. Inversion of ControlFormas de como atingir o DIP página 8
  9. 9. Inversion of ControlO que é inversão de controle??Dita quais as formas que podemos atingir o principio de inversão de dependência.Um conjunto de “padrões” para atingir o DIP• Interface inversion• Flow inversion• Creation InversionPrecisamos entender qual “controle” estamos tentando inverter.http://martinfowler.com/bliki/InversionOfControl.html página 9
  10. 10. Inversion of Control Dependency Inversion (Principle) Inversion of Control (Pattern) Interface Inversion Flow Inversion Creation Inversion Dependency Injection página 10
  11. 11. Interface Inversion Não use Interfaces sem saber o porque esta utilizando IBanana BancaDeFeira IPera ILaranja Pera Laranja IUva Uva página 11
  12. 12. Interface InversionInterfaces devem ter sempre mais de uma implementação ou um planejamento para isso IFruta BancaDeFeira Pera Uva Laranja página 12
  13. 13. Flow InversionPrograma procedural/sequencial (fluxo definido pelo próprio programa) Programa com GUI, fluxo de entrada agora nas mãos dos usuários (Fluxo invertido) página 13
  14. 14. Creation InversionNormalmente criamos nossas classes assim: var meuObjeto = new MinhaClasse();Criação do objeto é feita na classe onde o objeto será utilizadoMesmo com Interface Inversion você não necessariamente tem Creation Inversion: IFruta fruta = new Banana(); //Tipo concreto sendo instanciado na classe que //esta sendo utilizadoInverter o Controle aqui significa: Criar o objeto fora da classe onde ele será utilizadoTipos• Factory Pattern – Pessoa pessoa = PessoaFactory.Create();• Service Locator – Pessoa pessoa = ServiceLocator.Create(IPessoa);• Dependency Injection • PessoaRepository pessoaRepository = new PessoaRepository(); HomeController homeController = new HomeController(pessoaRepository); página 14
  15. 15. Dependency InjectionUma das maneiras de se inverter o controle página 15
  16. 16. Dependency InjectionÉ um tipo de IoC onde movemos a criação/binding da dependência para fora da classeque necessita de tal dependência.É forma pela qual associamos os tipos concretos a classes que dependem de abstrações.Podemos fazer isso de formas diferentes: Cuidado!!!• Construtor (Constructor Injection) – Mais utilizada• Propriedade (Setter Injection) – Mais ou menos utilizada Look Man! Im injecting my dependencies• Interface (Interface Injection) – Nem vou perder meu tempo página 16
  17. 17. DEMOnstraçãoDependency Injection página 17
  18. 18. IoC Containers Framework para DI página 18
  19. 19. IoC ContainerBasicamente um framework que nos ajuda a fazer DIExistem vários (vários mesmo )• Ninject - http://ninject.org/ - Segundo o Rodolfo o site mais bacanudo é deles :D• Unity - http://unity.codeplex.com/ - Da MS• Castle Windsor - http://stw.castleproject.org/Windsor.MainPage.ashx - Da Castle (bem utilizado por sinal)• Structure Map - http://structuremap.net/structuremap/ - Meu preferido, facinho• Xxx• YyyTodos nos permitem configurar nosso container apontando qual classe concreta vai paranossas abstrações.Alguns permitem configuração via XML (da hora)Alguns permitem a criação de Interceptors (assunto para outra conversa) página 19
  20. 20. DEMOnstraçãoIoC Container com Structure Map página 20

×