SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
Injection
de dépendance




                             Mathurin BODY


         TTFx Breizh User Group              1
Les dépendances
• En programmation orienté objet, des dépendances
  existent entre les classes du modèle
                MovieLister                              FileMovieFinder

        Array moviesDirectedBy(String d)                  Array findAll()




                                TTFx Breizh User Group                      2
Dépendances codées « en dur »
           MovieLister                               FileMovieFinder
                                      create
       List moviesDirectedBy()                         List findAll()




Simple
Couplage fort avec une implémentation spécifique
Pas de réutilisation possible
Pas facile à tester
                            TTFx Breizh User Group                      3
Injection de dépendance
• Couplage lâche par interface
• Délègue à un composant tiers la résolution de la
  dépendance en passant la bonne implémentation
Assembleur                 MovieLister            MovieFinder
             create                                 <<interface>>
                      Array moviesDirectedBy()    Array findAll()


                                                 FileMovieFinder
                          create
                                                  Array findAll()
• Inversion de contrôle
• Principe Hollywood : Don’t call us, we’ll call you !
                       TTFx Breizh User Group                       4
3 types d’injection de dépendances

• Injection par constructeur



• Injection par setter


• Injection par interface (ou méthode)


                     TTFx Breizh User Group   5
3 façons d’injecter une dépendance
• Programmatiquement



• Par configuration xml (ou mxml)




                  TTFx Breizh User Group   6
3 façons d’injecter une dépendance
• Par annotation (type ou id)




                   TTFx Breizh User Group   7
Les frameworks Flex de DI (ou IoC)
•   SwizFramework
•   Spring Actionscript (prana)
•   Parsley / spicelib
•   Mate
•   SmartyPants (inspired by Guice)
•   Robotlegs
•   …

                    TTFx Breizh User Group   8
Conclusion
  Couplage faible (limité à l’interface)
  Réutilisation de composants
  Testabilité (injection de bouchons ou mocks)

  Apprentissage du framework ou conteneur

Martin Fowler:
http://martinfowler.com/articles/injection.html

                         TTFx Breizh User Group   9

Más contenido relacionado

La actualidad más candente

Garbage collection
Garbage collectionGarbage collection
Garbage collectionsoeun Lee
 
Decision Trees und Random Forest mit Python
Decision Trees und Random Forest mit PythonDecision Trees und Random Forest mit Python
Decision Trees und Random Forest mit PythonDatamics
 
알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기Han Lee
 
La relecture de code : avant tout des pratiques
La relecture de code : avant tout des pratiquesLa relecture de code : avant tout des pratiques
La relecture de code : avant tout des pratiquesEric SIBER
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Introducción a Wiremock
Introducción a WiremockIntroducción a Wiremock
Introducción a WiremockJose Ortiz
 
애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 Young-Ho Cho
 
#6 Operadores de Comparação e Lógicos no MongoDB
#6   Operadores de Comparação e Lógicos no MongoDB#6   Operadores de Comparação e Lógicos no MongoDB
#6 Operadores de Comparação e Lógicos no MongoDBGabriel Alves Scavassa
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Younghan Kim
 
It depends: Loving .NET Core dependency injection or not
It depends: Loving .NET Core dependency injection or notIt depends: Loving .NET Core dependency injection or not
It depends: Loving .NET Core dependency injection or notAlex Thissen
 
Observability - Stockholm Splunk UG Jan 19 2023.pptx
Observability - Stockholm Splunk UG Jan 19 2023.pptxObservability - Stockholm Splunk UG Jan 19 2023.pptx
Observability - Stockholm Splunk UG Jan 19 2023.pptxMagnus Johansson
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency InjectionTheo Jungeblut
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014JWORKS powered by Ordina
 
Dao pattern
Dao patternDao pattern
Dao patternciriako
 
Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionDinesh Sharma
 

La actualidad más candente (20)

Garbage collection
Garbage collectionGarbage collection
Garbage collection
 
Decision Trees und Random Forest mit Python
Decision Trees und Random Forest mit PythonDecision Trees und Random Forest mit Python
Decision Trees und Random Forest mit Python
 
알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기
 
La relecture de code : avant tout des pratiques
La relecture de code : avant tout des pratiquesLa relecture de code : avant tout des pratiques
La relecture de code : avant tout des pratiques
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Introducción a Wiremock
Introducción a WiremockIntroducción a Wiremock
Introducción a Wiremock
 
애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향
 
#6 Operadores de Comparação e Lógicos no MongoDB
#6   Operadores de Comparação e Lógicos no MongoDB#6   Operadores de Comparação e Lógicos no MongoDB
#6 Operadores de Comparação e Lógicos no MongoDB
 
Android MVVM
Android MVVMAndroid MVVM
Android MVVM
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
 
It depends: Loving .NET Core dependency injection or not
It depends: Loving .NET Core dependency injection or notIt depends: Loving .NET Core dependency injection or not
It depends: Loving .NET Core dependency injection or not
 
Observability - Stockholm Splunk UG Jan 19 2023.pptx
Observability - Stockholm Splunk UG Jan 19 2023.pptxObservability - Stockholm Splunk UG Jan 19 2023.pptx
Observability - Stockholm Splunk UG Jan 19 2023.pptx
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
 
Dao pattern
Dao patternDao pattern
Dao pattern
 
Proxy Pattern
Proxy PatternProxy Pattern
Proxy Pattern
 
Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency Injection
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 

Destacado

Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralGeoffrey Bachelet
 
L’addictions aux technologies
L’addictions aux technologiesL’addictions aux technologies
L’addictions aux technologiesdarkrems
 
Donner du sens au Web - Tedx ENCGT - Tanger
Donner du sens au Web - Tedx ENCGT - Tanger Donner du sens au Web - Tedx ENCGT - Tanger
Donner du sens au Web - Tedx ENCGT - Tanger Yasser Monkachi
 
RV des technologies propres 2014 | DataToWeb
RV des technologies propres 2014 | DataToWebRV des technologies propres 2014 | DataToWeb
RV des technologies propres 2014 | DataToWebSherbrooke Innopole
 
Qué Es Internet
Qué Es InternetQué Es Internet
Qué Es Internetguest4ef221
 
L'Empire byzantin
L'Empire byzantin L'Empire byzantin
L'Empire byzantin ireari
 
Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"
Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"
Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"La French Tech Rennes St Malo
 
Media Art Catalog
Media Art CatalogMedia Art Catalog
Media Art Catalogkrisceleste
 
Journal de Liège-Guillemins, Septembre 2.007
Journal de Liège-Guillemins, Septembre 2.007Journal de Liège-Guillemins, Septembre 2.007
Journal de Liège-Guillemins, Septembre 2.007Eurovilles EV
 
Lengua, Sociedad, ComunicacióN Y DespéS
Lengua, Sociedad, ComunicacióN Y DespéSLengua, Sociedad, ComunicacióN Y DespéS
Lengua, Sociedad, ComunicacióN Y DespéSMaria Martha Espindola
 
POL4840 - Plan de cours de l'hiver 2017
POL4840 - Plan de cours de l'hiver 2017POL4840 - Plan de cours de l'hiver 2017
POL4840 - Plan de cours de l'hiver 2017Florent Michelot
 
The Watchman | The Game | Soutenance
The Watchman | The Game | SoutenanceThe Watchman | The Game | Soutenance
The Watchman | The Game | SoutenanceSylvain Bakri
 

Destacado (18)

Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en général
 
L’addictions aux technologies
L’addictions aux technologiesL’addictions aux technologies
L’addictions aux technologies
 
Donner du sens au Web - Tedx ENCGT - Tanger
Donner du sens au Web - Tedx ENCGT - Tanger Donner du sens au Web - Tedx ENCGT - Tanger
Donner du sens au Web - Tedx ENCGT - Tanger
 
Europe
EuropeEurope
Europe
 
Atelier Social TV - La Cantine numérique rennaise
Atelier Social TV - La Cantine numérique rennaise Atelier Social TV - La Cantine numérique rennaise
Atelier Social TV - La Cantine numérique rennaise
 
RV des technologies propres 2014 | DataToWeb
RV des technologies propres 2014 | DataToWebRV des technologies propres 2014 | DataToWeb
RV des technologies propres 2014 | DataToWeb
 
Imagera Fr
Imagera FrImagera Fr
Imagera Fr
 
Qué Es Internet
Qué Es InternetQué Es Internet
Qué Es Internet
 
L'Empire byzantin
L'Empire byzantin L'Empire byzantin
L'Empire byzantin
 
Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"
Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"
Open Data Garage - "Comment évaluer l'impact économique de l'open data local ?"
 
Media Art Catalog
Media Art CatalogMedia Art Catalog
Media Art Catalog
 
Journal de Liège-Guillemins, Septembre 2.007
Journal de Liège-Guillemins, Septembre 2.007Journal de Liège-Guillemins, Septembre 2.007
Journal de Liège-Guillemins, Septembre 2.007
 
Eib Presentación
Eib PresentaciónEib Presentación
Eib Presentación
 
Lengua, Sociedad, ComunicacióN Y DespéS
Lengua, Sociedad, ComunicacióN Y DespéSLengua, Sociedad, ComunicacióN Y DespéS
Lengua, Sociedad, ComunicacióN Y DespéS
 
Otf mulhouse 200912 PPT
Otf mulhouse 200912 PPTOtf mulhouse 200912 PPT
Otf mulhouse 200912 PPT
 
Laissez votre marque.fr
Laissez votre marque.frLaissez votre marque.fr
Laissez votre marque.fr
 
POL4840 - Plan de cours de l'hiver 2017
POL4840 - Plan de cours de l'hiver 2017POL4840 - Plan de cours de l'hiver 2017
POL4840 - Plan de cours de l'hiver 2017
 
The Watchman | The Game | Soutenance
The Watchman | The Game | SoutenanceThe Watchman | The Game | Soutenance
The Watchman | The Game | Soutenance
 

Más de La French Tech Rennes St Malo

Financer votre projet de startup - Les dispositifs de financement de l'nnovation
Financer votre projet de startup - Les dispositifs de financement de l'nnovationFinancer votre projet de startup - Les dispositifs de financement de l'nnovation
Financer votre projet de startup - Les dispositifs de financement de l'nnovationLa French Tech Rennes St Malo
 
Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...
Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...
Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...La French Tech Rennes St Malo
 
Financer votre projet de startup - Le fonctionnement des business angels
Financer votre projet de startup - Le fonctionnement des business angelsFinancer votre projet de startup - Le fonctionnement des business angels
Financer votre projet de startup - Le fonctionnement des business angelsLa French Tech Rennes St Malo
 
Financer votre projet de startup - Le financement de l'innovation par BPI France
Financer votre projet de startup - Le financement de l'innovation par BPI FranceFinancer votre projet de startup - Le financement de l'innovation par BPI France
Financer votre projet de startup - Le financement de l'innovation par BPI FranceLa French Tech Rennes St Malo
 
Financer votre projet de startup - le parcours de financement
Financer votre projet de startup - le parcours de financementFinancer votre projet de startup - le parcours de financement
Financer votre projet de startup - le parcours de financementLa French Tech Rennes St Malo
 

Más de La French Tech Rennes St Malo (20)

Financer votre projet de startup - Les dispositifs de financement de l'nnovation
Financer votre projet de startup - Les dispositifs de financement de l'nnovationFinancer votre projet de startup - Les dispositifs de financement de l'nnovation
Financer votre projet de startup - Les dispositifs de financement de l'nnovation
 
Financer votre projet de startup - Le crowdfunding
Financer votre projet de startup - Le crowdfundingFinancer votre projet de startup - Le crowdfunding
Financer votre projet de startup - Le crowdfunding
 
Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...
Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...
Financer votre projet de startup - Lever des fonds auprès de fonds d'investis...
 
Financer votre projet de startup - Le fonctionnement des business angels
Financer votre projet de startup - Le fonctionnement des business angelsFinancer votre projet de startup - Le fonctionnement des business angels
Financer votre projet de startup - Le fonctionnement des business angels
 
Financer votre projet de startup - Le financement de l'innovation par BPI France
Financer votre projet de startup - Le financement de l'innovation par BPI FranceFinancer votre projet de startup - Le financement de l'innovation par BPI France
Financer votre projet de startup - Le financement de l'innovation par BPI France
 
Financer votre projet de startup - le parcours de financement
Financer votre projet de startup - le parcours de financementFinancer votre projet de startup - le parcours de financement
Financer votre projet de startup - le parcours de financement
 
Startup workshop
Startup workshopStartup workshop
Startup workshop
 
Statuts
Statuts Statuts
Statuts
 
Dossier de candidature French Tech Rennes v2
Dossier de candidature French Tech Rennes v2Dossier de candidature French Tech Rennes v2
Dossier de candidature French Tech Rennes v2
 
La French Tech c'est quoi ?
La French Tech c'est quoi ?La French Tech c'est quoi ?
La French Tech c'est quoi ?
 
Twitter pour les moins nuls 2014
Twitter pour les moins nuls 2014Twitter pour les moins nuls 2014
Twitter pour les moins nuls 2014
 
Webstorm
WebstormWebstorm
Webstorm
 
Typescript coffeescript
Typescript coffeescriptTypescript coffeescript
Typescript coffeescript
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Recrutement 2.0
Recrutement 2.0Recrutement 2.0
Recrutement 2.0
 
Real time bidding cantine
Real time bidding cantineReal time bidding cantine
Real time bidding cantine
 
Presentation Google solutions de monétisation
Presentation Google solutions de monétisationPresentation Google solutions de monétisation
Presentation Google solutions de monétisation
 
Twitter et les journalistes
Twitter et les journalistesTwitter et les journalistes
Twitter et les journalistes
 
Slides des prédictions TMT Deloitte 2013 à #Rennes
Slides des prédictions TMT Deloitte 2013 à #RennesSlides des prédictions TMT Deloitte 2013 à #Rennes
Slides des prédictions TMT Deloitte 2013 à #Rennes
 
Second écran : usages et technologies
Second écran : usages et technologiesSecond écran : usages et technologies
Second écran : usages et technologies
 

Injection de dépendance

  • 1. Injection de dépendance Mathurin BODY TTFx Breizh User Group 1
  • 2. Les dépendances • En programmation orienté objet, des dépendances existent entre les classes du modèle MovieLister FileMovieFinder Array moviesDirectedBy(String d) Array findAll() TTFx Breizh User Group 2
  • 3. Dépendances codées « en dur » MovieLister FileMovieFinder create List moviesDirectedBy() List findAll() Simple Couplage fort avec une implémentation spécifique Pas de réutilisation possible Pas facile à tester TTFx Breizh User Group 3
  • 4. Injection de dépendance • Couplage lâche par interface • Délègue à un composant tiers la résolution de la dépendance en passant la bonne implémentation Assembleur MovieLister MovieFinder create <<interface>> Array moviesDirectedBy() Array findAll() FileMovieFinder create Array findAll() • Inversion de contrôle • Principe Hollywood : Don’t call us, we’ll call you ! TTFx Breizh User Group 4
  • 5. 3 types d’injection de dépendances • Injection par constructeur • Injection par setter • Injection par interface (ou méthode) TTFx Breizh User Group 5
  • 6. 3 façons d’injecter une dépendance • Programmatiquement • Par configuration xml (ou mxml) TTFx Breizh User Group 6
  • 7. 3 façons d’injecter une dépendance • Par annotation (type ou id) TTFx Breizh User Group 7
  • 8. Les frameworks Flex de DI (ou IoC) • SwizFramework • Spring Actionscript (prana) • Parsley / spicelib • Mate • SmartyPants (inspired by Guice) • Robotlegs • … TTFx Breizh User Group 8
  • 9. Conclusion Couplage faible (limité à l’interface) Réutilisation de composants Testabilité (injection de bouchons ou mocks) Apprentissage du framework ou conteneur Martin Fowler: http://martinfowler.com/articles/injection.html TTFx Breizh User Group 9