SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
Inversion of control
The Dependency Injection pattern




Bruno Lui
Introdução

* Padrão comum entre frameworks

* Objetivo de fazer a amarração entre componentes

* Frameworks começam a fornecer soluções
Exemplo inicial

class MovieLister...
    public Movie[] moviesDirectedBy(String arg) {
        List allMovies = finder.findAll();
         for (Iterator it = allMovies.iterator(); it.hasNext();) {
         Movie movie = (Movie) it.next();
             if (!movie.getDirector().equals(arg))
                it.remove();
        }
        return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]);
    }
Extraindo uma interface e criando implementação


public interface MovieFinder{
List findAll() ;
}



class MovieLister...
   private MovieFinder finder;

  public MovieLister () {
    finder = new ColonDelimitedMovieFinder("movies1.txt");
  }
As dependências
Injeção de dependências


- Ter um objeto separado, o montador (assembler).

- Popula um campo em um objeto (lister) com uma
implementação apropriada para uma interface (finder).



    Existem três tipos principais

- Constructor Injection (Injeção por Construtores)

- Setter Injection (Injeção por Métodos Set)

- Interface Injection (Injeção por Interfaces).
Exemplo com PicoContainer


     class MovieLister...                          class ColonMovieFinder...
        public MovieLister(MovieFinder finder) {     public ColonMovieFinder(String filename) {
          this.finder = finder;                         this.filename = filename;
        }                                            }



private MutablePicoContainer configureContainer() {
   MutablePicoContainer pico = new DefaultPicoContainer();
   Parameter[] finderParams = { new ConstantParameter("movies1.txt")};

    pico.registerComponentImplementation(MovieFinder.class, ColonMovieFinder.class, finderParams);
    pico.registerComponentImplementation(MovieLister.class);

    return pico;
}
Exemplo com Spring

class MovieLister...
   private MovieFinder finder;                 class ColonMovieFinder...
                                                  public void setFilename(String filename) {
  public void setFinder (MovieFinder finder) {      this.filename = filename;
    this.finder = finder;                         }
  }


         <beans>
           <bean id="MovieLister" class="spring.MovieLister">
              <property name = "finder">
                    <ref local = "MovieFinder" / >
              < / property>
           < / bean>
           <bean id="MovieFinder" class="spring.ColonMovieFinder">
              <property name = "filename">
                    <value>movies1.txt< / value>
              < / property>
           < / bean>
         < / beans>
Referências
http://martinfowler.com/articles/injection.html

http://javafree.uol.com.br/artigo/871453/Inversion-Of-Control-Containers-de-
Inversao-de-Controle-e-o-padrao-Dependency-Injection.html

http://imasters.com.br/artigo/4497/spring_framework_introducao

Contenu connexe

En vedette

Dependency Injection and Autofac
Dependency Injection and AutofacDependency Injection and Autofac
Dependency Injection and Autofacmeghantaylor
 
Functional Dependency Injection in C#
Functional Dependency Injection in C#Functional Dependency Injection in C#
Functional Dependency Injection in C#Thomas Jaskula
 
Dependency injection& comparative study
Dependency injection& comparative studyDependency injection& comparative study
Dependency injection& comparative studypallavs20
 
Functional Programming
Functional ProgrammingFunctional Programming
Functional ProgrammingBruno Lui
 
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion PrincipleShahriar Hyder
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency InjectionTheo Jungeblut
 
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...Svetlin Nakov
 

En vedette (9)

Refactoring
RefactoringRefactoring
Refactoring
 
Dependency Injection and Autofac
Dependency Injection and AutofacDependency Injection and Autofac
Dependency Injection and Autofac
 
Functional Dependency Injection in C#
Functional Dependency Injection in C#Functional Dependency Injection in C#
Functional Dependency Injection in C#
 
Dependency injection& comparative study
Dependency injection& comparative studyDependency injection& comparative study
Dependency injection& comparative study
 
Functional Programming
Functional ProgrammingFunctional Programming
Functional Programming
 
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion Principle
 
Switch
SwitchSwitch
Switch
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
 
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
 

Similaire à Dependency Inversion

Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetosxbacon
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Respiração Programada
Respiração ProgramadaRespiração Programada
Respiração ProgramadaMarcelo Diniz
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
Aplicacoes gráficas em Java
Aplicacoes gráficas em JavaAplicacoes gráficas em Java
Aplicacoes gráficas em JavaMarco Reis
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Spring e Injeção de Dependência
Spring e Injeção de DependênciaSpring e Injeção de Dependência
Spring e Injeção de DependênciaDaniel Cukier
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaDaniel Faria Gomes
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DPaulo Henrique Lerbach Rodrigues
 

Similaire à Dependency Inversion (20)

Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Jquery a technical overview
Jquery a technical overviewJquery a technical overview
Jquery a technical overview
 
Vraptor
VraptorVraptor
Vraptor
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Respiração Programada
Respiração ProgramadaRespiração Programada
Respiração Programada
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Aplicacoes gráficas em Java
Aplicacoes gráficas em JavaAplicacoes gráficas em Java
Aplicacoes gráficas em Java
 
Git, GitHub e OO
Git, GitHub e OOGit, GitHub e OO
Git, GitHub e OO
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Spring e Injeção de Dependência
Spring e Injeção de DependênciaSpring e Injeção de Dependência
Spring e Injeção de Dependência
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
 

Dependency Inversion

  • 1. Inversion of control The Dependency Injection pattern Bruno Lui
  • 2. Introdução * Padrão comum entre frameworks * Objetivo de fazer a amarração entre componentes * Frameworks começam a fornecer soluções
  • 3. Exemplo inicial class MovieLister... public Movie[] moviesDirectedBy(String arg) { List allMovies = finder.findAll(); for (Iterator it = allMovies.iterator(); it.hasNext();) { Movie movie = (Movie) it.next(); if (!movie.getDirector().equals(arg))                 it.remove(); } return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]);     }
  • 4. Extraindo uma interface e criando implementação public interface MovieFinder{ List findAll() ; } class MovieLister... private MovieFinder finder; public MovieLister () { finder = new ColonDelimitedMovieFinder("movies1.txt"); }
  • 6. Injeção de dependências - Ter um objeto separado, o montador (assembler). - Popula um campo em um objeto (lister) com uma implementação apropriada para uma interface (finder). Existem três tipos principais - Constructor Injection (Injeção por Construtores) - Setter Injection (Injeção por Métodos Set) - Interface Injection (Injeção por Interfaces).
  • 7. Exemplo com PicoContainer class MovieLister... class ColonMovieFinder... public MovieLister(MovieFinder finder) { public ColonMovieFinder(String filename) { this.finder = finder; this.filename = filename; } } private MutablePicoContainer configureContainer() { MutablePicoContainer pico = new DefaultPicoContainer(); Parameter[] finderParams = { new ConstantParameter("movies1.txt")}; pico.registerComponentImplementation(MovieFinder.class, ColonMovieFinder.class, finderParams); pico.registerComponentImplementation(MovieLister.class); return pico; }
  • 8. Exemplo com Spring class MovieLister... private MovieFinder finder; class ColonMovieFinder... public void setFilename(String filename) { public void setFinder (MovieFinder finder) { this.filename = filename; this.finder = finder; } } <beans> <bean id="MovieLister" class="spring.MovieLister"> <property name = "finder"> <ref local = "MovieFinder" / > < / property> < / bean> <bean id="MovieFinder" class="spring.ColonMovieFinder"> <property name = "filename"> <value>movies1.txt< / value> < / property> < / bean> < / beans>