SlideShare une entreprise Scribd logo
@fXzo @antoined#Reactive
Les Applications Réactives: un nouveau
paradigme pour relever les défis de
l’économie numérique !
http://www.intech.lu
@fXzo @antoined#Reactive
ou
Comment expliquer à son patron qu’il
serait utile de développer en utilisant
les patterns réactifs !
@fXzo @antoined#Reactive
Qu’est ce qu’un système réactif ?
Un système qui répond à des
variations importantes de
paramètres prédéfinis sans
remettre en cause sa structure et
sans perturber son
fonctionnement nominal.
@fXzo @antoined#Reactive
Etre réactif au niveau business
Découverte Validation
Business Model
Hypothèse, mesure
décision
Réaction
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
Measure faster
Funnel analysis
Cohort analysis
Net promoter score
Search engine marketing
Predictive monitoring
Lean startup est réactif
Build Faster
Unit Tests
Usability Tests
Continuous Integration
Incremental Deployment
Free & Open Source
Cluster immune System
Just in Time Scalability
Refactoring
Developer Sandbox
Minimum Viable Product
Learn faster
Split tests
Customer development
Five Why’s
Customer Advisory
Board
Falsifiable hypotheses
Product owner
Accountability
Customer archetypes
Cross-functional teams
Smoke tests
Ideas
Measure
Learn
AppsData
Measure faster
Split tests
Continuous deployment
Usability tests
Real-time monitoring & alerting
Customer liaison
Build
@fXzo @antoined#Reactive
Etre réactif pour mesurer
Asynchrones
Non bloquantes
Systématiques
Au fil de l’eau
Cas nominaux et cas d’erreur
Les mesures doivent être :
@fXzo @antoined#Reactive
Réagir de façon non bloquante
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Cas d’utilisation
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Le serveur reçoit une requête :
Pour construire la réponse, il faut :
rechercher l’utilisateur dans la base
de données
récupérer les transactions via un
service web
construire un objet JSON de retour
GET /user/1234GET /user/1234
@fXzo @antoined#Reactive
{user: …,
transactions: […]}
{user: …,
transactions: […]}
Réagir de façon non bloquante
getUser
getTransactions
GET /user/1234GET /user/1234
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Les tâches sont parallélisables
Une partie du temps côté serveur est
perdu à attendre des
données
ProblèmesProblèmes
@fXzo @antoined#Reactive
Réagir de façon non bloquante
• Lance en parallèle les requêtes vers la base de données et le service web
• Définit une fonction qui sera exécutée quand les données seront disponibles
• Une fois les données disponibles, construit la réponse et l’envoie au client
Modèle non-bloquant
@fXzo @antoined#Reactive
{user: …,
transactions: […]}
{user: …,
transactions: […]}
Réagir de façon non bloquante
getTransactions
GET /user/1234GET /user/1234
getUser
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Traitements en parallèle
Plus de thread bloqué : le serveur réagit
aux évènements
qui surviennent
AvantagesAvantages
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Exemple en Scala
Scala 2.10
Future/Promise
@fXzo @antoined#Reactive
Réagir de façon non bloquante
• Types natifs du langage : Future[T] représente un traitement asynchrone
qui peut éventuellement retourner une instance de T
• Parallélisable : possibilité d’exécuter une liste de Future et d’enregistrer un
callback une fois tous les traitements terminés
• Composable : enchaînement de Future : « exécute X et ensuite exécute Y »
@fXzo @antoined#Reactive
Réagir de façon non bloquante
@fXzo @antoined#Reactive
Réagir de façon non bloquante
•2 états : « complété » et « non complété »
•Permet de :
• Définir des fonctions (« callbacks ») qui seront exécutées lorsque la Future
sera complétée (onSuccess, …)
• D’appliquer une fonction sur la donnée quand la Future sera complétée (map)
• De composer (enchaîner) les Futures (flatMap) pour en obtenir une nouvelle
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Une Future peut avoir plusieurs callbacks
Mais ne peut être complétée qu’une seule
fois
Le type Future est utilisé en « lecture »
(récupérer sa valeur)Alors comment compléter une Future ?
Utilisation du type Promise !
Alors comment compléter une Future ?
Utilisation du type Promise !
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Exemple en
JavaScript
API JQuery
Deferred
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
Réagir de façon non bloquante
L’objet Promise est utilisé pour construire
une Future
Il permet de compléter cette Future « plus
tard »
… mais une seule fois !Une Future est en « lecture seule »
Promise permet d’écrire une valeur
dans une Future
Une Future est en « lecture seule »
Promise permet d’écrire une valeur
dans une Future
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Comment gérer les erreurs dans un contexte asynchrone ?
• Une Future complétée peut avoir deux états : Success ou Failure
• Des callbacks dédiés pour ces différents résultats :
onSuccess / onFailure
@fXzo @antoined#Reactive
Scala : Future
API
Scala : Future
API
JavaScript :
JQuery
JavaScript :
JQuery
@fXzo @antoined#Reactive
Réagir de façon non bloquante
• En Scala, map , flatMap, … ne vont s’exécuter que pour les cas de succès
• Il est possible de « récupérer » d’une Future en erreur, via les méthodes
recover, recoverWith
@fXzo @antoined#Reactive
Réagir de façon non bloquante
@fXzo @antoined#Reactive
Pourquoi être réactif à l’ère de
l’économie digitale ?
@fXzo @antoined#Reactive
Les 4 piliers de la transformation
digitale
MobileMobile SocialSocial
Big DataBig Data CloudCloud
Temps
Réel
@fXzo @antoined#Reactive
Qu’est ce qu’une application
réactive ?
Une application qui répond à des
variations importantes du nombre
de connexions simultanées sans
remettre en cause sa structure et
sans perturber son fonctionnement
nominal.
@fXzo @antoined#Reactive
Caractéristiques d’une appli
réactive
ParalléliserParalléliser
Limiter et ne pas
bloquer les IO
Limiter et ne pas
bloquer les IO
Gérer les erreurs
comme les cas
nominaux
Gérer les erreurs
comme les cas
nominaux
Nombre de connexions
simultanées
Nombre de connexions
simultanées
Comment ?
Orientée évènements
Scalable Résiliente Prédictible
@fXzo @antoined#Reactive
Un exemple: Code Story 2013
Calcul d’un planning de voyage optimal pour 50.000 trajet (4Mo de JSON) en moins
de 30s de temps vu de l’utilisateur.
TR1 TR2 TR50000…
ServeurServeur
TR1 TR2 TR50000…
HTTP
SortedSetSortedSet
OptimisationOptimisation
TR91 TR34 TR21…
TR1 TR2 TR50000
TR34
@fXzo @antoined#Reactive
Un exemple: Code Story 2013
Version réactive
TR1 TR2 TR50000…
ServeurServeur
SortedSetSortedSet
OptimisationOptimisation
TR91 TR34 TR21…
TR34
HTTP
IterateeIteratee
TR1 TR2 TR50000
@fXzo @antoined#Reactive
Le code réactif
@fXzo @antoined#Reactive
Réagir aux événements
@fXzo @antoined#Reactive
Réagir aux événements
• Producteurs / consommateurs d’événements
• Faible couplage entre les composants
• Meilleure utilisation des ressources
• Travailler avec des flux d’événements, potentiellement infinis
• Par exemple : événements de géolocalisation, flux de transactions, …
• Besoin de filtrer les événements, les modifier, agréger différents flux
@fXzo @antoined#Reactive
Réagir aux événements
Cas d’utilisation
@fXzo @antoined#Reactive
Réagir aux événements
Une application souhaite logger toutes
les actions effectuées par les
utilisateurs
Doit être fait de façon non intrusive
(pas de dégradation des performances
du service)
Différentes sources et types
d’événements
@fXzo @antoined#Reactive
Réagir aux événements
Exemple en
JavaScript
bacon.js
@fXzo @antoined#Reactive
Réagir aux événements
bacon.js est une librairie :
• Pour produire et travailler avec des flux d’événements en JavaScript
• Qui offre un pattern de type « Observable »
• Permettant également d’utiliser des patterns de la programmation fonctionnelle
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
Réagir aux événements
map(...)map(...) onValue(...)onValue(...)merge(...)merge(...)
keyupkeyup
unloadunload
clickclick
{type: …}{type: …}
@fXzo @antoined#Reactive
Réagir aux événements
Flux à partir d’événements « externes » :
• Du navigateur : click, keyup, unload
• Résultats d’appels asynchrones (AJAX)
Ou événements créés avec bacon :
• Fonctionnement en mode « push »
@fXzo @antoined#Reactive
Conclusion
@fXzo @antoined#Reactive
Quelques librairies Reactives
RxJava
@fXzo @antoined#Reactive
Questions ?

Contenu connexe

Similaire à Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
cluelessjoe
 
Promises Javascript
Promises JavascriptPromises Javascript
Promises Javascript
Julien CROUZET
 
Décryptage des LLMs au-delà de la hype - Lyon Data science
Décryptage des LLMs au-delà de la hype - Lyon Data scienceDécryptage des LLMs au-delà de la hype - Lyon Data science
Décryptage des LLMs au-delà de la hype - Lyon Data science
Marie-Alice Blete
 
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
Publicis Sapient Engineering
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
Oswald De Riemaecker ☁
 
Formation java script
Formation java scriptFormation java script
Formation java script
Romdhani Asma
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Ippon
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwt
hkairi
 
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
OCTO Technology
 
Vert.x
Vert.xVert.x
Vert.x
Xavier MARIN
 
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOSCocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
Claire Reynaud
 
BDD (Behavior Driven Development) - Une voie vers l'agilité
BDD (Behavior Driven Development) - Une voie vers l'agilitéBDD (Behavior Driven Development) - Une voie vers l'agilité
BDD (Behavior Driven Development) - Une voie vers l'agilité
CARA_Lyon
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
halleck45
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic search
Idriss Neumann
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
VISEO
 
Les données transitoires (transients) vous veulent du bien
Les données transitoires (transients) vous veulent du bienLes données transitoires (transients) vous veulent du bien
Les données transitoires (transients) vous veulent du bien
Boiteaweb
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
Microsoft
 
2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne
Didier Durand
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
Association Agile Nantes
 

Similaire à Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique (20)

DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 
Promises Javascript
Promises JavascriptPromises Javascript
Promises Javascript
 
Décryptage des LLMs au-delà de la hype - Lyon Data science
Décryptage des LLMs au-delà de la hype - Lyon Data scienceDécryptage des LLMs au-delà de la hype - Lyon Data science
Décryptage des LLMs au-delà de la hype - Lyon Data science
 
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
 
Formation java script
Formation java scriptFormation java script
Formation java script
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwt
 
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
 
Vert.x
Vert.xVert.x
Vert.x
 
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOSCocoaHeads Lyon - Mode Déconnecté dans une app iOS
CocoaHeads Lyon - Mode Déconnecté dans une app iOS
 
BDD (Behavior Driven Development) - Une voie vers l'agilité
BDD (Behavior Driven Development) - Une voie vers l'agilitéBDD (Behavior Driven Development) - Une voie vers l'agilité
BDD (Behavior Driven Development) - Une voie vers l'agilité
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic search
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Les données transitoires (transients) vous veulent du bien
Les données transitoires (transients) vous veulent du bienLes données transitoires (transients) vous veulent du bien
Les données transitoires (transients) vous veulent du bien
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne
 
Drools
DroolsDrools
Drools
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 

Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

  • 1. @fXzo @antoined#Reactive Les Applications Réactives: un nouveau paradigme pour relever les défis de l’économie numérique ! http://www.intech.lu
  • 2. @fXzo @antoined#Reactive ou Comment expliquer à son patron qu’il serait utile de développer en utilisant les patterns réactifs !
  • 3. @fXzo @antoined#Reactive Qu’est ce qu’un système réactif ? Un système qui répond à des variations importantes de paramètres prédéfinis sans remettre en cause sa structure et sans perturber son fonctionnement nominal.
  • 4. @fXzo @antoined#Reactive Etre réactif au niveau business Découverte Validation Business Model Hypothèse, mesure décision Réaction
  • 6. @fXzo @antoined#Reactive Measure faster Funnel analysis Cohort analysis Net promoter score Search engine marketing Predictive monitoring Lean startup est réactif Build Faster Unit Tests Usability Tests Continuous Integration Incremental Deployment Free & Open Source Cluster immune System Just in Time Scalability Refactoring Developer Sandbox Minimum Viable Product Learn faster Split tests Customer development Five Why’s Customer Advisory Board Falsifiable hypotheses Product owner Accountability Customer archetypes Cross-functional teams Smoke tests Ideas Measure Learn AppsData Measure faster Split tests Continuous deployment Usability tests Real-time monitoring & alerting Customer liaison Build
  • 7. @fXzo @antoined#Reactive Etre réactif pour mesurer Asynchrones Non bloquantes Systématiques Au fil de l’eau Cas nominaux et cas d’erreur Les mesures doivent être :
  • 8. @fXzo @antoined#Reactive Réagir de façon non bloquante
  • 9. @fXzo @antoined#Reactive Réagir de façon non bloquante Cas d’utilisation
  • 10. @fXzo @antoined#Reactive Réagir de façon non bloquante Le serveur reçoit une requête : Pour construire la réponse, il faut : rechercher l’utilisateur dans la base de données récupérer les transactions via un service web construire un objet JSON de retour GET /user/1234GET /user/1234
  • 11. @fXzo @antoined#Reactive {user: …, transactions: […]} {user: …, transactions: […]} Réagir de façon non bloquante getUser getTransactions GET /user/1234GET /user/1234
  • 12. @fXzo @antoined#Reactive Réagir de façon non bloquante Les tâches sont parallélisables Une partie du temps côté serveur est perdu à attendre des données ProblèmesProblèmes
  • 13. @fXzo @antoined#Reactive Réagir de façon non bloquante • Lance en parallèle les requêtes vers la base de données et le service web • Définit une fonction qui sera exécutée quand les données seront disponibles • Une fois les données disponibles, construit la réponse et l’envoie au client Modèle non-bloquant
  • 14. @fXzo @antoined#Reactive {user: …, transactions: […]} {user: …, transactions: […]} Réagir de façon non bloquante getTransactions GET /user/1234GET /user/1234 getUser
  • 15. @fXzo @antoined#Reactive Réagir de façon non bloquante Traitements en parallèle Plus de thread bloqué : le serveur réagit aux évènements qui surviennent AvantagesAvantages
  • 16. @fXzo @antoined#Reactive Réagir de façon non bloquante Exemple en Scala Scala 2.10 Future/Promise
  • 17. @fXzo @antoined#Reactive Réagir de façon non bloquante • Types natifs du langage : Future[T] représente un traitement asynchrone qui peut éventuellement retourner une instance de T • Parallélisable : possibilité d’exécuter une liste de Future et d’enregistrer un callback une fois tous les traitements terminés • Composable : enchaînement de Future : « exécute X et ensuite exécute Y »
  • 18. @fXzo @antoined#Reactive Réagir de façon non bloquante
  • 19. @fXzo @antoined#Reactive Réagir de façon non bloquante •2 états : « complété » et « non complété » •Permet de : • Définir des fonctions (« callbacks ») qui seront exécutées lorsque la Future sera complétée (onSuccess, …) • D’appliquer une fonction sur la donnée quand la Future sera complétée (map) • De composer (enchaîner) les Futures (flatMap) pour en obtenir une nouvelle
  • 20. @fXzo @antoined#Reactive Réagir de façon non bloquante Une Future peut avoir plusieurs callbacks Mais ne peut être complétée qu’une seule fois Le type Future est utilisé en « lecture » (récupérer sa valeur)Alors comment compléter une Future ? Utilisation du type Promise ! Alors comment compléter une Future ? Utilisation du type Promise !
  • 21. @fXzo @antoined#Reactive Réagir de façon non bloquante Exemple en JavaScript API JQuery Deferred
  • 23. @fXzo @antoined#Reactive Réagir de façon non bloquante L’objet Promise est utilisé pour construire une Future Il permet de compléter cette Future « plus tard » … mais une seule fois !Une Future est en « lecture seule » Promise permet d’écrire une valeur dans une Future Une Future est en « lecture seule » Promise permet d’écrire une valeur dans une Future
  • 24. @fXzo @antoined#Reactive Réagir de façon non bloquante Comment gérer les erreurs dans un contexte asynchrone ? • Une Future complétée peut avoir deux états : Success ou Failure • Des callbacks dédiés pour ces différents résultats : onSuccess / onFailure
  • 25. @fXzo @antoined#Reactive Scala : Future API Scala : Future API JavaScript : JQuery JavaScript : JQuery
  • 26. @fXzo @antoined#Reactive Réagir de façon non bloquante • En Scala, map , flatMap, … ne vont s’exécuter que pour les cas de succès • Il est possible de « récupérer » d’une Future en erreur, via les méthodes recover, recoverWith
  • 27. @fXzo @antoined#Reactive Réagir de façon non bloquante
  • 28. @fXzo @antoined#Reactive Pourquoi être réactif à l’ère de l’économie digitale ?
  • 29. @fXzo @antoined#Reactive Les 4 piliers de la transformation digitale MobileMobile SocialSocial Big DataBig Data CloudCloud Temps Réel
  • 30. @fXzo @antoined#Reactive Qu’est ce qu’une application réactive ? Une application qui répond à des variations importantes du nombre de connexions simultanées sans remettre en cause sa structure et sans perturber son fonctionnement nominal.
  • 31. @fXzo @antoined#Reactive Caractéristiques d’une appli réactive ParalléliserParalléliser Limiter et ne pas bloquer les IO Limiter et ne pas bloquer les IO Gérer les erreurs comme les cas nominaux Gérer les erreurs comme les cas nominaux Nombre de connexions simultanées Nombre de connexions simultanées Comment ? Orientée évènements Scalable Résiliente Prédictible
  • 32. @fXzo @antoined#Reactive Un exemple: Code Story 2013 Calcul d’un planning de voyage optimal pour 50.000 trajet (4Mo de JSON) en moins de 30s de temps vu de l’utilisateur. TR1 TR2 TR50000… ServeurServeur TR1 TR2 TR50000… HTTP SortedSetSortedSet OptimisationOptimisation TR91 TR34 TR21… TR1 TR2 TR50000 TR34
  • 33. @fXzo @antoined#Reactive Un exemple: Code Story 2013 Version réactive TR1 TR2 TR50000… ServeurServeur SortedSetSortedSet OptimisationOptimisation TR91 TR34 TR21… TR34 HTTP IterateeIteratee TR1 TR2 TR50000
  • 36. @fXzo @antoined#Reactive Réagir aux événements • Producteurs / consommateurs d’événements • Faible couplage entre les composants • Meilleure utilisation des ressources • Travailler avec des flux d’événements, potentiellement infinis • Par exemple : événements de géolocalisation, flux de transactions, … • Besoin de filtrer les événements, les modifier, agréger différents flux
  • 37. @fXzo @antoined#Reactive Réagir aux événements Cas d’utilisation
  • 38. @fXzo @antoined#Reactive Réagir aux événements Une application souhaite logger toutes les actions effectuées par les utilisateurs Doit être fait de façon non intrusive (pas de dégradation des performances du service) Différentes sources et types d’événements
  • 39. @fXzo @antoined#Reactive Réagir aux événements Exemple en JavaScript bacon.js
  • 40. @fXzo @antoined#Reactive Réagir aux événements bacon.js est une librairie : • Pour produire et travailler avec des flux d’événements en JavaScript • Qui offre un pattern de type « Observable » • Permettant également d’utiliser des patterns de la programmation fonctionnelle
  • 44. @fXzo @antoined#Reactive Réagir aux événements map(...)map(...) onValue(...)onValue(...)merge(...)merge(...) keyupkeyup unloadunload clickclick {type: …}{type: …}
  • 45. @fXzo @antoined#Reactive Réagir aux événements Flux à partir d’événements « externes » : • Du navigateur : click, keyup, unload • Résultats d’appels asynchrones (AJAX) Ou événements créés avec bacon : • Fonctionnement en mode « push »