backday xebia : découvrez rxjava, le reactive programming
Post on 27-Jul-2015
145 Views
Preview:
TRANSCRIPT
Jérome Doucet | Romain Niveau
RxJava
Découvrez RxJava, le reactive programming
Pourquoi Rx ?
OriginePourquoi Rx
• Reactive programming
• Rx: Reactive Extensions
• Initialement en .NET
• Polyglote
• Extension du pattern Observer
3
DocumentationsPourquoi Rx
• Documentations très riches
• Basées sur des diagrammes à billes
• Arbre de décision pour trouver les bons opérateurs
4
DocumentationsPourquoi Rx
5
Pattern Observer
Pattern initialPattern Observer
7
Dans RxJavaPattern Observer
• Basé sur ce pattern
• Ajout d’opérateurs divers (agrégation, inspections de séquences, …)
• Ecriture fonctionnelle
8
Classes principalesPattern Observer
• Observable
• Observer
• Subscription
• Scheduler
9
3 méthodes principalesPattern Observer
• OnNext• Appelée après chaque évènement
• OnError• Appelée lorsqu’une erreur survient
• OnCompleted• Appelée à la fin de la séquence
10
Exemple d’Observer: classe complètePattern Observer
11
Exemple d’Observer: actions rapidesPattern Observer
12
ConnectableObservablePattern Observer
• Cold Observable
• Hot Observable
• Non synchronisé par défaut
• Connect() synchronise les Observers
13
Séquences
CréationsSéquences
• Les séquences sont au coeur de RxJava
• Elles sont toujours créées à l’aide de méthodes statiques
• Quelques exemples…
15
CréationsSéquences
from()
16
CréationsSéquences
from()
17
CréationsSéquences
create()
18
CréationsSéquences
• Et il en existe pleins d’autres :• just(), repeat(), repeatWhen(), defer(), range(), interval(),
timer(), empty(), error(), never().
• Une extension (rxjava-async) permet de créer des Observables à partir de fonctions.
19
Inspection de séquences
InspectionSéquences
• Les séquences peuvent être inspectées.
• Les méthodes suivantes peuvent être utilisées :• all(), contains(), exists(), isEmpty(), sequenceEquals()
21
Agrégation de séquences
AgrégationSéquences
• RxJava propose des opérateurs d’agrégation courants
• Ils vont permettre de présenter la donnée sous une forme qui va faciliter son exploitation
• Ils sont en partie inspirés d’opérateurs fonctionnels.
• Quelques exemples…
23
AgrégationSéquences
reduce()
24
AgrégationSéquences
collect()
25
AgrégationSéquences
• L’opérateur reduce est aussi présent, ainsi que d’autres permettant de convertir la séquence en Collections (toList(), toMap(), toSortedList(), …)
• Une extension (rxjava-math) permet de faire des agrégations sur des nombres
• Deux autres opérateurs permettent de faire des agrégations sur des String uniquement, join() et stringConcat()
26
Backpressure / Gestion d’erreurs
Méthodes filtrantesBackpressure
• throttleFirst
• throttleLast
• debounce
28
Concepts alternatifs: bufferBackpressure
29
Concepts alternatifs: windowBackpressure
30
Principes de baseGestion d’erreurs
• Aucune exception levée hors de l’Observable par défaut
• Si onError lève une exception, celle ci remonte dans une OnErrorFailedException
• OnErrorNotImplementedException est levée si l’Observer n’a pas de onError
• CompositeException encapsule l’ensemble des exceptions
31
Principes avancésGestion d’erreurs
• OnErrorResumeNext
• OnErrorReturn
• Retry
32
Principes avancésGestion d’erreurs
• OnErrorResumeNext
• OnErrorReturn
• Retry
33
Principes avancésGestion d’erreurs
• OnErrorResumeNext
• OnErrorReturn
• Retry
34
Combinaison de séquences
Combinaison de séquences
• Répond aux besoins de fusion entre plusieurs sources de données.
• Permet d’arbitrer des sources de données concurrentes.
• Permet de corréler les événements issus de plusieurs sources de données.
36
FusionCombinaison de séquences
concat()
37
FusionCombinaison de séquences
startWith()
38
ConcurrenceCombinaison de séquences
amb()
39
ConcurrenceCombinaison de séquences
merge()
40
CorrélationCombinaison de séquences
zip()
41
Concurrency
SchedulerConcurrency
• Basée sur des Schedulers fourni par RxJava :• computation()• from(Executor)• immediate()• io()• newTread()• trampoline()
• Peuvent être utilisés directement
• Mais il existe des raccourcis
43
Concurrency
subscribeOn() - observeOn()
44
Démo
Conclusion
Conclusion
• Framework uniquement pour la gestion d’évènements
• Ne sert pas à faire des appels asynchrones
• Framework complexe qui demande du temps de prise en main
• Utilisé dans des outils open source: Hystrix, rx-vertx
47
top related