inversion of control with nuun

44
Epo Jemba @ejemba Lundi 11 juillet 1 / 44 L‘IOC avec Nuun.io « Develop using your own rules »

Upload: epo-jemba

Post on 15-Apr-2017

81 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 1 / 44

L‘IOC avec Nuun.io

« Develop using your own rules »

Page 2: Inversion of control with nuun

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

Page 3: Inversion of control with nuun

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

Page 4: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 4 / 44

Métaphore de la rivière

Conte écologique

Page 5: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 5 / 44

Tous les jours, je pars travailler

Page 6: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 6 / 44

je marche, je suis en contrôle.

Page 7: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 7 / 44

Un jour, je change de travail

Page 8: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 8 / 44

Une rivière sur le chemin !

Page 9: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 9 / 44

Nager ?

Page 10: Inversion of control with nuun

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

Page 11: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 11 / 44

Un bateau

Page 12: Inversion of control with nuun

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, →

Page 13: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 13 / 44

Il faut acquerir un bateau ...

Page 14: Inversion of control with nuun

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.

Page 15: Inversion of control with nuun

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

Page 16: Inversion of control with nuun

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

Page 17: Inversion of control with nuun

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

Page 18: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 18 / 44

3

En pratique la solution tierce vient souvent de vendeurs de solutions

Page 19: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 19 / 44

4

Les vendeurs de solutions proposent souvent leurs conventions bonnes ou mauvaises où ..

Page 20: Inversion of control with nuun

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

Page 21: Inversion of control with nuun

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.

Page 22: Inversion of control with nuun

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

Page 23: Inversion of control with nuun

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

Page 24: Inversion of control with nuun

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

Page 25: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 25 / 44

nuun.io

est une micro lib permettant la mise en oeuvre l’inversion de contrôle

Page 26: Inversion of control with nuun

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é.

Page 27: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 27 / 44

Vue générale de nuun.io

Page 28: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 28 / 44

Page 29: Inversion of control with nuun

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 ...)

Page 30: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 30 / 44

Détail du protocole Kernel / Plugin

Page 31: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 31 / 44

Chargement du kernel

Page 32: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 32 / 44

Chargement des plugins

Page 33: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 33 / 44

Les plugins envoient des requètes au kernel

Page 34: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 34 / 44

Le kernel scanne le classpath en fonction des requètes des plugins

Page 35: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 35 / 44

Le kernel retourne le résultat de chaque requète à chaque plugin

Page 36: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 36 / 44

À partir des résultats du kernel chaque plugin construit sa configuration dynamique

Page 37: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 37 / 44

Chaque plugin retourne son fragment de configuration

Page 38: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 38 / 44

Le kernel détermine la configuration globale et peut ainsi construire l’injecteur.

Page 39: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 39 / 44

L’injecteur comprend le modèle du graphe de l’application

Page 40: Inversion of control with nuun

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

Page 41: Inversion of control with nuun

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

Page 42: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 42 / 44

Démo Time

Page 43: Inversion of control with nuun

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

Page 44: Inversion of control with nuun

Epo Jemba @ejemba Lundi 11 juillet 44 / 44

Credits

● https://unsplash.com/@michaeljohnlum

● Pirogue fileuse dont les dossiers sont ornés de motifs variésPhot. S. François © Inventaire général, ADAGP, 2001

● Petit chantier de construction de pirogues, les coques monoxyles attendent les bordagesPhot. S. François © Inventaire général, ADAGP, 2001

● https://unsplash.com/zack_silver