SlideShare ist ein Scribd-Unternehmen logo
1 von 9
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaCh'ti JUG
 
SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC PrinciplesPavlo Hodysh
 
Mise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*PlusMise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*Pluswebreaker
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignVictor Rentea
 
20.4 Java interfaces and abstraction
20.4 Java interfaces and abstraction20.4 Java interfaces and abstraction
20.4 Java interfaces and abstractionIntro C# Book
 
Clean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening KeynoteClean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening KeynoteVictor Rentea
 
Clean pragmatic architecture @ devflix
Clean pragmatic architecture @ devflixClean pragmatic architecture @ devflix
Clean pragmatic architecture @ devflixVictor Rentea
 
REST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkREST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkMarcel Chastain
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the DomainVictor Rentea
 
A quick introduction to Strapi CMS
A quick introduction to Strapi CMSA quick introduction to Strapi CMS
A quick introduction to Strapi CMSAshokkumar T A
 
Functional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User GroupFunctional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User GroupVictor Rentea
 
The tests are trying to tell you something@VoxxedBucharest.pptx
The tests are trying to tell you something@VoxxedBucharest.pptxThe tests are trying to tell you something@VoxxedBucharest.pptx
The tests are trying to tell you something@VoxxedBucharest.pptxVictor Rentea
 

Was ist angesagt? (20)

Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 
React-cours.pdf
React-cours.pdfReact-cours.pdf
React-cours.pdf
 
SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC Principles
 
Mise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*PlusMise en Forme des Résultats avec SQL*Plus
Mise en Forme des Résultats avec SQL*Plus
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable Design
 
SQL-ORACLE.pptx
SQL-ORACLE.pptxSQL-ORACLE.pptx
SQL-ORACLE.pptx
 
20.4 Java interfaces and abstraction
20.4 Java interfaces and abstraction20.4 Java interfaces and abstraction
20.4 Java interfaces and abstraction
 
Clean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening KeynoteClean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening Keynote
 
React
React React
React
 
Clean pragmatic architecture @ devflix
Clean pragmatic architecture @ devflixClean pragmatic architecture @ devflix
Clean pragmatic architecture @ devflix
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event Sourcing
 
Fluent Bit: Log Forwarding at Scale
Fluent Bit: Log Forwarding at ScaleFluent Bit: Log Forwarding at Scale
Fluent Bit: Log Forwarding at Scale
 
ReactJS.pdf
ReactJS.pdfReactJS.pdf
ReactJS.pdf
 
REST Easy with Django-Rest-Framework
REST Easy with Django-Rest-FrameworkREST Easy with Django-Rest-Framework
REST Easy with Django-Rest-Framework
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the Domain
 
React js
React jsReact js
React js
 
A quick introduction to Strapi CMS
A quick introduction to Strapi CMSA quick introduction to Strapi CMS
A quick introduction to Strapi CMS
 
Functional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User GroupFunctional Patterns with Java8 @Bucharest Java User Group
Functional Patterns with Java8 @Bucharest Java User Group
 
The tests are trying to tell you something@VoxxedBucharest.pptx
The tests are trying to tell you something@VoxxedBucharest.pptxThe tests are trying to tell you something@VoxxedBucharest.pptx
The tests are trying to tell you something@VoxxedBucharest.pptx
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Mehr von 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
 

Mehr von 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