SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
Epo Jemba @ejemba Lundi 11 juillet 1 / 44
L‘IOC avec Nuun.io
« Develop using your own rules »
Epo Jemba @ejemba Lundi 11 juillet 2 / 44
Votre guide
● Architecte Logiciel Senior Ronin (i.e.
indépendant)
● 17 ans de vadrouille dans le monde de
l‘ingénierie logicielle
● Polyglote ou «language agnostic» (Java,
Go, Scheme, Ada, Bash, Clojure, Scala,..)
● Étudie sur les architecture scalable
(Openshift, Kubernetes, Docker, ...)
● Aime le libre, l‘art de coder et concevoir
des applications belles et durables
Epo Jemba @ejemba Lundi 11 juillet 3 / 44
Agenda
● Définition : L‘inversion de contrôle
● Presentation de nuun
● Demo : L’inversion de contrôle avec nuun kernel
Epo Jemba @ejemba Lundi 11 juillet 4 / 44
Métaphore de la rivière
Conte écologique
Epo Jemba @ejemba Lundi 11 juillet 5 / 44
Tous les jours, je pars travailler
Epo Jemba @ejemba Lundi 11 juillet 6 / 44
je marche, je suis en contrôle.
Epo Jemba @ejemba Lundi 11 juillet 7 / 44
Un jour, je change de travail
Epo Jemba @ejemba Lundi 11 juillet 8 / 44
Une rivière sur le chemin !
Epo Jemba @ejemba Lundi 11 juillet 9 / 44
Nager ?
Epo Jemba @ejemba Lundi 11 juillet 10 / 44
Nager : Pour et Contre
● Pour
– On ne dépend de rien ni de personne #yolo
– On est en contrôle complet,
– Sensation totale de l’expérience
● Contre
– On met plus de temps
– On doit se sécher
– C’est un peu dangereux
Epo Jemba @ejemba Lundi 11 juillet 11 / 44
Un bateau
Epo Jemba @ejemba Lundi 11 juillet 12 / 44
Bateau : Pour et Contre
● Pour
– On ne se mouille pas, pas besoin de se sécher
– On arrive plus vite
– c’est moins dangereux
– Moins de contexte switching
● Contre
– On maitrîse un moins,
– Moins de sensations,
– Et surtout, →
Epo Jemba @ejemba Lundi 11 juillet 13 / 44
Il faut acquerir un bateau ...
Epo Jemba @ejemba Lundi 11 juillet 14 / 44
La métaphore s’arrête ici.
Le monde numérique s’affranchissant de
certaines barrières,
le temps/homme et l’expertise sont
partageables plus facilement aussi grâce aux
logiciels libres et à l’opensource.
Epo Jemba @ejemba Lundi 11 juillet 15 / 44
L’inversion de contrôle
est donc un principe général que l’on retrouve
IRL comme dans la programmation
Epo Jemba @ejemba Lundi 11 juillet 16 / 44
1
On utilise l’inversion de contrôle quand on a un
besoin réel voire un point réellement bloquant
ce n’est pas juste de la factorisation de code
Car elle a un coût
Epo Jemba @ejemba Lundi 11 juillet 17 / 44
2
L’Inversion de contrôle délègue la résolution
d’une problématique précise à une solution
tierce
Epo Jemba @ejemba Lundi 11 juillet 18 / 44
3
En pratique la solution tierce vient souvent de
vendeurs de solutions
Epo Jemba @ejemba Lundi 11 juillet 19 / 44
4
Les vendeurs de solutions proposent souvent
leurs conventions bonnes ou mauvaises où ..
Epo Jemba @ejemba Lundi 11 juillet 20 / 44
On a un menu
→ xml
→ annotation style 1
Mais on aimerait aller voir en cuisine pour
apprendre à se faire ses propres recettes
Epo Jemba @ejemba Lundi 11 juillet 21 / 44
Déclinaison de l’inversion de contrôle
● S.O.L.I.D. : le D est D.I. « Dependency Inversion ». L’ « Inversion de
dépendance » est un principe basé sur la notion d’interface
permettant de mettre en œuvre l’IOC dans son code
● D.I. « Dependency Injection » .L’«injection de dépendance » un
pattern délégant l’instanciation et l’affectation des dépendances
● A.O.P. : La programmation orientée aspect permet également la
mise en œuvre de l’IOC.
● Ces 3 concepts servent au final à définir les propriétés statiques
et dynamiques de l«Object Graph» de l’application.
Epo Jemba @ejemba Lundi 11 juillet 22 / 44
Problématiques d’industrialisation
● Définition de l’Object Graph (DI, AOP,…)
● Configuration (JNDI, etcd, )
● Gestion de la modularité
● Gestion de l’extensibilité
● Prise en compte de la configuration de nouveaux
framework complexe etc
● Le tout sans xml et avec son propre style
Epo Jemba @ejemba Lundi 11 juillet 23 / 44
Convention vs Configuration 1/2
● Les conventions sont l’outil le plus commun pour
palier à la perte de contrôle,
● Suivre des conventions empêchent de se perdre
quand le flow du code source est caché
● Utiliser ses propres conventions dans une
organisation, est facteur clés de réussite
Epo Jemba @ejemba Lundi 11 juillet 24 / 44
Convention vs Configuration 2/2
● Trop de configuration apporte de la friction
● L’utilisation de valeurs par défaut saines et
cohérente est un bon principe
● Nous cherchons tous l’auto-configuration
Epo Jemba @ejemba Lundi 11 juillet 25 / 44
nuun.io
est une micro lib permettant la mise en oeuvre
l’inversion de contrôle
Epo Jemba @ejemba Lundi 11 juillet 26 / 44
● Nuun est un µframework permettant de concevoir des piles
logicielles et des applications non triviales en se basant sur
l’inversion de contrôle en Java/Scala/Kotlin/etc
● Nuun s’appuie sur des composant standards et éprouvés
– la JSR 330 pour gérer la DI (via guice)
– ServiceLoader
– Reflections
– Plus une architecture Kernel/Plugin unique
● Il est compatible avec les majeurs DI containers du marché.
Epo Jemba @ejemba Lundi 11 juillet 27 / 44
Vue générale de nuun.io
Epo Jemba @ejemba Lundi 11 juillet 28 / 44
Epo Jemba @ejemba Lundi 11 juillet 29 / 44
Fonctionnement général
● Le kernel doit fournir le graphe de l’application
● Pour cela il s’appuie sur les plugins en aggregeant
leur fragments de configuration en une
configuration globale
● La configuration est donc toujours fonction de
l’environnement de l’application (classpath,
ressources, etc ...)
Epo Jemba @ejemba Lundi 11 juillet 30 / 44
Détail du protocole Kernel / Plugin
Epo Jemba @ejemba Lundi 11 juillet 31 / 44
Chargement du kernel
Epo Jemba @ejemba Lundi 11 juillet 32 / 44
Chargement des plugins
Epo Jemba @ejemba Lundi 11 juillet 33 / 44
Les plugins envoient des requètes au kernel
Epo Jemba @ejemba Lundi 11 juillet 34 / 44
Le kernel scanne le classpath en
fonction des requètes des plugins
Epo Jemba @ejemba Lundi 11 juillet 35 / 44
Le kernel retourne le résultat de chaque
requète à chaque plugin
Epo Jemba @ejemba Lundi 11 juillet 36 / 44
À partir des résultats du kernel chaque plugin
construit sa configuration dynamique
Epo Jemba @ejemba Lundi 11 juillet 37 / 44
Chaque plugin retourne son fragment de
configuration
Epo Jemba @ejemba Lundi 11 juillet 38 / 44
Le kernel détermine la configuration
globale et peut ainsi construire l’injecteur.
Epo Jemba @ejemba Lundi 11 juillet 39 / 44
L’injecteur comprend le modèle du
graphe de l’application
Epo Jemba @ejemba Lundi 11 juillet 40 / 44
Done !
● Ce processus se passe au début de l’application une
seule fois et dure moins de 200 ms
● Il permet d’avoir un niveau de flexibilité quasi
illimité et nous allons le voir une définition
d’injection de dépendance, d’AOP complètement
dynamique
● Ce qui permet de définir nos propres conventions
Epo Jemba @ejemba Lundi 11 juillet 41 / 44
API Complète
API
● Kernel Lifecycle
● Kernel params
● Plugin Lifecycle
● Request API
● Plugin Dependencies
● Integration Tests
SPI
● DI Provider
● Concerns
● Multi-Round initialisat°
● Kernel Extension
● Kernel params aliases
Epo Jemba @ejemba Lundi 11 juillet 42 / 44
Démo Time
Epo Jemba @ejemba Lundi 11 juillet 43 / 44
From zero to productive with nuun
● Street Fighter – Static DI
● Street Fighter – IOC ++
– Custom launcher
● Crash with 2 launcher
– Detect Pattern in our code then automate their
configuration – The sound (SF2PluginTest)
– «Here comes a new challenger»
● Monoidish Runner for the launcher
Epo Jemba @ejemba Lundi 11 juillet 44 / 44
Credits
● https://unsplash.com/@michaeljohnlum
● Pirogue fileuse dont les dossiers sont ornés de motifs variés
Phot. S. François © Inventaire général, ADAGP, 2001
● Petit chantier de construction de pirogues, les coques monoxyles attendent les bordages
Phot. S. François © Inventaire général, ADAGP, 2001
● https://unsplash.com/zack_silver
●

Contenu connexe

Similaire à Inversion of control with nuun

Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdfbadrfathallah2
 
Distro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedDistro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedAnne Nicolas
 
2 - java : caractéristiques de java
2 - java : caractéristiques de java2 - java : caractéristiques de java
2 - java : caractéristiques de javaopentuto
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & KubernetesPerfect Memory
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Association Agile Nantes
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
Play Framework
Play FrameworkPlay Framework
Play FrameworkArmaklan
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationStéphane Traumat
 
201001 Agilité
201001 Agilité201001 Agilité
201001 Agilitélyonjug
 
La Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SILa Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SIcpruvost
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdfOmbotimbe Salifou
 
Soutenance séminaire bibliographique
Soutenance séminaire bibliographiqueSoutenance séminaire bibliographique
Soutenance séminaire bibliographiqueMaxime ALAY-EDDINE
 

Similaire à Inversion of control with nuun (20)

Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Javaoop
JavaoopJavaoop
Javaoop
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdf
 
Distro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedDistro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbedded
 
2 - java : caractéristiques de java
2 - java : caractéristiques de java2 - java : caractéristiques de java
2 - java : caractéristiques de java
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & Kubernetes
 
Javavs net
Javavs netJavavs net
Javavs net
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Introduction Kotlin
Introduction KotlinIntroduction Kotlin
Introduction Kotlin
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
201001 Agilité
201001 Agilité201001 Agilité
201001 Agilité
 
La Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SILa Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SI
 
Symfony Best Practices
Symfony Best PracticesSymfony Best Practices
Symfony Best Practices
 
Jenkins
JenkinsJenkins
Jenkins
 
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf
 
Soutenance séminaire bibliographique
Soutenance séminaire bibliographiqueSoutenance séminaire bibliographique
Soutenance séminaire bibliographique
 

Inversion of control with nuun

  • 1. Epo Jemba @ejemba Lundi 11 juillet 1 / 44 L‘IOC avec Nuun.io « Develop using your own rules »
  • 2. Epo Jemba @ejemba Lundi 11 juillet 2 / 44 Votre guide ● Architecte Logiciel Senior Ronin (i.e. indépendant) ● 17 ans de vadrouille dans le monde de l‘ingénierie logicielle ● Polyglote ou «language agnostic» (Java, Go, Scheme, Ada, Bash, Clojure, Scala,..) ● Étudie sur les architecture scalable (Openshift, Kubernetes, Docker, ...) ● Aime le libre, l‘art de coder et concevoir des applications belles et durables
  • 3. Epo Jemba @ejemba Lundi 11 juillet 3 / 44 Agenda ● Définition : L‘inversion de contrôle ● Presentation de nuun ● Demo : L’inversion de contrôle avec nuun kernel
  • 4. Epo Jemba @ejemba Lundi 11 juillet 4 / 44 Métaphore de la rivière Conte écologique
  • 5. Epo Jemba @ejemba Lundi 11 juillet 5 / 44 Tous les jours, je pars travailler
  • 6. Epo Jemba @ejemba Lundi 11 juillet 6 / 44 je marche, je suis en contrôle.
  • 7. Epo Jemba @ejemba Lundi 11 juillet 7 / 44 Un jour, je change de travail
  • 8. Epo Jemba @ejemba Lundi 11 juillet 8 / 44 Une rivière sur le chemin !
  • 9. Epo Jemba @ejemba Lundi 11 juillet 9 / 44 Nager ?
  • 10. Epo Jemba @ejemba Lundi 11 juillet 10 / 44 Nager : Pour et Contre ● Pour – On ne dépend de rien ni de personne #yolo – On est en contrôle complet, – Sensation totale de l’expérience ● Contre – On met plus de temps – On doit se sécher – C’est un peu dangereux
  • 11. Epo Jemba @ejemba Lundi 11 juillet 11 / 44 Un bateau
  • 12. Epo Jemba @ejemba Lundi 11 juillet 12 / 44 Bateau : Pour et Contre ● Pour – On ne se mouille pas, pas besoin de se sécher – On arrive plus vite – c’est moins dangereux – Moins de contexte switching ● Contre – On maitrîse un moins, – Moins de sensations, – Et surtout, →
  • 13. Epo Jemba @ejemba Lundi 11 juillet 13 / 44 Il faut acquerir un bateau ...
  • 14. Epo Jemba @ejemba Lundi 11 juillet 14 / 44 La métaphore s’arrête ici. Le monde numérique s’affranchissant de certaines barrières, le temps/homme et l’expertise sont partageables plus facilement aussi grâce aux logiciels libres et à l’opensource.
  • 15. Epo Jemba @ejemba Lundi 11 juillet 15 / 44 L’inversion de contrôle est donc un principe général que l’on retrouve IRL comme dans la programmation
  • 16. Epo Jemba @ejemba Lundi 11 juillet 16 / 44 1 On utilise l’inversion de contrôle quand on a un besoin réel voire un point réellement bloquant ce n’est pas juste de la factorisation de code Car elle a un coût
  • 17. Epo Jemba @ejemba Lundi 11 juillet 17 / 44 2 L’Inversion de contrôle délègue la résolution d’une problématique précise à une solution tierce
  • 18. Epo Jemba @ejemba Lundi 11 juillet 18 / 44 3 En pratique la solution tierce vient souvent de vendeurs de solutions
  • 19. Epo Jemba @ejemba Lundi 11 juillet 19 / 44 4 Les vendeurs de solutions proposent souvent leurs conventions bonnes ou mauvaises où ..
  • 20. Epo Jemba @ejemba Lundi 11 juillet 20 / 44 On a un menu → xml → annotation style 1 Mais on aimerait aller voir en cuisine pour apprendre à se faire ses propres recettes
  • 21. Epo Jemba @ejemba Lundi 11 juillet 21 / 44 Déclinaison de l’inversion de contrôle ● S.O.L.I.D. : le D est D.I. « Dependency Inversion ». L’ « Inversion de dépendance » est un principe basé sur la notion d’interface permettant de mettre en œuvre l’IOC dans son code ● D.I. « Dependency Injection » .L’«injection de dépendance » un pattern délégant l’instanciation et l’affectation des dépendances ● A.O.P. : La programmation orientée aspect permet également la mise en œuvre de l’IOC. ● Ces 3 concepts servent au final à définir les propriétés statiques et dynamiques de l«Object Graph» de l’application.
  • 22. Epo Jemba @ejemba Lundi 11 juillet 22 / 44 Problématiques d’industrialisation ● Définition de l’Object Graph (DI, AOP,…) ● Configuration (JNDI, etcd, ) ● Gestion de la modularité ● Gestion de l’extensibilité ● Prise en compte de la configuration de nouveaux framework complexe etc ● Le tout sans xml et avec son propre style
  • 23. Epo Jemba @ejemba Lundi 11 juillet 23 / 44 Convention vs Configuration 1/2 ● Les conventions sont l’outil le plus commun pour palier à la perte de contrôle, ● Suivre des conventions empêchent de se perdre quand le flow du code source est caché ● Utiliser ses propres conventions dans une organisation, est facteur clés de réussite
  • 24. Epo Jemba @ejemba Lundi 11 juillet 24 / 44 Convention vs Configuration 2/2 ● Trop de configuration apporte de la friction ● L’utilisation de valeurs par défaut saines et cohérente est un bon principe ● Nous cherchons tous l’auto-configuration
  • 25. Epo Jemba @ejemba Lundi 11 juillet 25 / 44 nuun.io est une micro lib permettant la mise en oeuvre l’inversion de contrôle
  • 26. Epo Jemba @ejemba Lundi 11 juillet 26 / 44 ● Nuun est un µframework permettant de concevoir des piles logicielles et des applications non triviales en se basant sur l’inversion de contrôle en Java/Scala/Kotlin/etc ● Nuun s’appuie sur des composant standards et éprouvés – la JSR 330 pour gérer la DI (via guice) – ServiceLoader – Reflections – Plus une architecture Kernel/Plugin unique ● Il est compatible avec les majeurs DI containers du marché.
  • 27. Epo Jemba @ejemba Lundi 11 juillet 27 / 44 Vue générale de nuun.io
  • 28. Epo Jemba @ejemba Lundi 11 juillet 28 / 44
  • 29. Epo Jemba @ejemba Lundi 11 juillet 29 / 44 Fonctionnement général ● Le kernel doit fournir le graphe de l’application ● Pour cela il s’appuie sur les plugins en aggregeant leur fragments de configuration en une configuration globale ● La configuration est donc toujours fonction de l’environnement de l’application (classpath, ressources, etc ...)
  • 30. Epo Jemba @ejemba Lundi 11 juillet 30 / 44 Détail du protocole Kernel / Plugin
  • 31. Epo Jemba @ejemba Lundi 11 juillet 31 / 44 Chargement du kernel
  • 32. Epo Jemba @ejemba Lundi 11 juillet 32 / 44 Chargement des plugins
  • 33. Epo Jemba @ejemba Lundi 11 juillet 33 / 44 Les plugins envoient des requètes au kernel
  • 34. Epo Jemba @ejemba Lundi 11 juillet 34 / 44 Le kernel scanne le classpath en fonction des requètes des plugins
  • 35. Epo Jemba @ejemba Lundi 11 juillet 35 / 44 Le kernel retourne le résultat de chaque requète à chaque plugin
  • 36. Epo Jemba @ejemba Lundi 11 juillet 36 / 44 À partir des résultats du kernel chaque plugin construit sa configuration dynamique
  • 37. Epo Jemba @ejemba Lundi 11 juillet 37 / 44 Chaque plugin retourne son fragment de configuration
  • 38. Epo Jemba @ejemba Lundi 11 juillet 38 / 44 Le kernel détermine la configuration globale et peut ainsi construire l’injecteur.
  • 39. Epo Jemba @ejemba Lundi 11 juillet 39 / 44 L’injecteur comprend le modèle du graphe de l’application
  • 40. Epo Jemba @ejemba Lundi 11 juillet 40 / 44 Done ! ● Ce processus se passe au début de l’application une seule fois et dure moins de 200 ms ● Il permet d’avoir un niveau de flexibilité quasi illimité et nous allons le voir une définition d’injection de dépendance, d’AOP complètement dynamique ● Ce qui permet de définir nos propres conventions
  • 41. Epo Jemba @ejemba Lundi 11 juillet 41 / 44 API Complète API ● Kernel Lifecycle ● Kernel params ● Plugin Lifecycle ● Request API ● Plugin Dependencies ● Integration Tests SPI ● DI Provider ● Concerns ● Multi-Round initialisat° ● Kernel Extension ● Kernel params aliases
  • 42. Epo Jemba @ejemba Lundi 11 juillet 42 / 44 Démo Time
  • 43. Epo Jemba @ejemba Lundi 11 juillet 43 / 44 From zero to productive with nuun ● Street Fighter – Static DI ● Street Fighter – IOC ++ – Custom launcher ● Crash with 2 launcher – Detect Pattern in our code then automate their configuration – The sound (SF2PluginTest) – «Here comes a new challenger» ● Monoidish Runner for the launcher
  • 44. Epo Jemba @ejemba Lundi 11 juillet 44 / 44 Credits ● https://unsplash.com/@michaeljohnlum ● Pirogue fileuse dont les dossiers sont ornés de motifs variés Phot. S. François © Inventaire général, ADAGP, 2001 ● Petit chantier de construction de pirogues, les coques monoxyles attendent les bordages Phot. S. François © Inventaire général, ADAGP, 2001 ● https://unsplash.com/zack_silver ●