SlideShare uma empresa Scribd logo
1 de 78
Desmistificando a
programação reativa
(e outros conceitos)
Loiane Groner
@loiane
github.com/loiane
loiane.com
loiane.training
Programação reativa
Programação funcional reativa
Sistemas reativos
Padrões reativos
Arquitetura reativa
Programação reativa
Programação reativa + Rx
https://am22.akamaized.net/tms/cnt/uploads/2010/12/tech-blog-bingo1.png
Loiane Groner
@loiane
github.com/loiane
loiane.com
loiane.training
Java, JavaScript/HTML5,
Sencha, Angular, Phonegap/
Ionic
Disponível (inglês) na amazon.com.br
https://novatec.com.br/livros/estruturas-de-dados-algoritmos-em-javascript/
era um vez…
1969
Alan Kay
Pai OO
The
Reactive
Engine
“the machine
which can
participate in a
dialogue”
http://www.chilton-computing.org.uk/inf/pdfs/kay.htm
The
Reactive
Engine
1970-80s
Programação
de fluxo de
dados
Paul Kosinski
https://goo.gl/ciirBb
Jack Dennis
https://goo.gl/qTJvLR
85: Sistemas reativos Sistemas transformativos
“repeatedly prompted by
the outside world and
their role is to
continuously respond to
external inputs”
“accepts inputs, performs
transformations on them and
produces outputs”
On the development of reactive systems
D. Harel and A. Pnueli

The development of a reactive system https://goo.gl/R5dFB9
Eventos e condições Estado e transições Eventos de saída
Descrevendo Sistemas Reativos
Desenvolvendo Sistemas Reativos
Sistema transformativo Sistema reativo
Especificação
Sistema
final
Ponto
Início
Implementação
(design)
Comportamento
(especificação)
1. Eventos atualizando o estado https://goo.gl/GSkxEW
2. O estado satisfaz as variáveis https://goo.gl/oZvuJM
3. Processamento de streams de eventos https://goo.gl/ft2nBK
1991: Programação reativa
• Eventos externos
• Reações
1: Eventos atualizando o estado
1: Eventos atualizando o estado
C.observe(c => F.set(c * 1.8 + 32));
F.observe(f => C.set((f - 32) / 1.8));
• Metáfora visual
• Manipulação direta
• Mudanças refletidas no estado
2: Estado satisfaz variáveis
2: Estado satisfaz variáveis
F <-> C * 1.8 + 32
3: Processamento de streams
“Processamento de streams é
natural à programação reativa”
John Plaice
3: Processamento de streams
F = C.map(c => c * 1.8 + 32)
C1 = F1.map(f => (f-32) / 1.8)
1997: Programação funcional reativa
Functional Reactive Animations https://goo.gl/4mjiYu


1. Modelagem temporal: comportamento e sinais
2. Modelagem de eventos
3. Reatividade declarativa
4. View polimórfica
PFR: Eventos e comportamentos
Declarativo x Imperativo
Componentes reativos
tendem a ser
declarativos
Declaração de como as
coisas são feitas, não de
como devem ser feitas
Relógio10:00
As horas estarão aqui
Relógio10:00
A cada segundo:
pega as horas
atualiza a view
que horas são?
10:00
http://www.reactivemanifesto.org/pt-BR
Manifesto Reativo: 2013
reage aos usuários
Responsivo
reage a falhas
Resiliente
reage a carga
Elástico
iteração de módulos e componentes
Orientado a mensagens
Objetivo
Princípios
Método
Modelando componentes de código como sistemas reativos
Código
Código
Código
Código
Código
streams de eventos!
Já fazemos programação reativa
Promises
Desacoplando o
código + tempo
Modelar o código como
um sistema reativo é
adicionar a capacidade
de responder à outro
código
Códigos precisam
observar: callbacks,
eventos, delegates, etc
Objeto A Objeto B
começa a observar
notifica
notifica
notifica
pára de a observar
Código reage a streams de eventos
Código
Reativo
Benefícios: reduz dependências e facilita código declarativo!
Outro
Reativo
faça X
notifica
X
Mas em que lugar posso
aplicar isso no meu
projeto?
View Lógica
REST Client
Dados
Cloud
Reactive Extensions
Observer
•Criar Observables e observá-los
•Manipular os dados conforme necessidade
Observable
subscribe()
onNext()Op
Objeto Promise
Iterable Observable
Síncrono Assíncrono
ValorúnicoMúltiplosvalores
Panorama da teoria da reatividade
Streams assíncronos
• eventos click
• input de dados
• dados do servidor
• ERROS!
PF + R
• Composição e agregação de streams
• Bom para sistemas event-driven e com
concorrência
• Declarativo
• Fácil de testar
Extensões reativas (Rx)
http://reactivex.io
https://yakovfain.files.wordpress.com/2017/04/operators.png
•http://rxmarbles.com
•https://rxviz.com
•https://github.com/Reactive-Extensions/RxJSKoans
•http://reactive.how
https://plugins.jetbrains.com/plugin/9696-java-stream-debugger
Padrões
eativos
Gerenciar o estado e
controle de fluxo
Redux é uma
biblioteca, e também é
um padrão
Redux é uma
biblioteca, e também é
um padrão reativo
sem Redux
Componente iniciando a mudança
Estado
com Redux
Estado
Redux Store
Ação
dispatch
subscribe
reducer Novo Estado
Estado
Ação
dispatch
+
store
Flow de dados unidirecional com Redux
Reducer Store Component
Ações
subscribe
dispatch
@Component({
template: `
<div>Counter: {{ counter }}</div>
`
})
export class CounterComponent {
counter: number;
counterSub: Subscription;
ngOnInit() {
this.counterSub = Observable.interval(1000)
.startWith(0)
.subscribe(counter => (this.counter = counter));
}
ngOnDestroy() {
this.counterSub.unsubscribe();
}
}
@Component({
template: `Counter: {{ counter$ | async }}`
})
export class CounterComponent {
counter$: Observable<number>;
ngOnInit() {
this.counter$ = Observable.interval(1000).startWith(0);
}
}
@Component({
template: `
<div>Counter: {{ counter }}</div>
`
})
export class CounterComponent {
counter: number;
counterSub: Subscription;
ngOnInit() {
this.counterSub = Observable.interval(1000)
.startWith(0)
.subscribe(counter => (this.counter = counter));
}
ngOnDestroy() {
this.counterSub.unsubscribe();
}
}
Arquitetura
eativa
É só pro front-end?
https://docs.spring.io/spring-framework/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html
Mono.from(userRequestPublisher)
.then(userRepository::findUserProfile,
userRepository::findUserPaymentMethod)
.log("user.requests")
.or(Mono.delay(5)
.then(n -> Mono.error(new TimeoutException()))
.mergeWith(userRepository::findSimilarUserDetails)
.map(userDetailsTuple -> userDetailsTuple.t1.username)
.publishOn(SchedulerGroup.io())
.subscribe(responseSubscriber);
http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-cloud.html
Programação reativa
Programação funcional reativa
Sistemas reativos
Padrões reativos
Arquitetura reativa
Obrigada!
@loiane
github.com/loiane
loiane.com
loiane.training
youtube.com/loianegroner
Pra estudar mais
• http://rxmarbles.com
• https://rxviz.com
• https://github.com/Reactive-Extensions/RxJSKoans
• http://reactive.how
• https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
• http://blog.danlew.net/2017/07/27/an-introduction-to-functional-reactive-programming/
• https://www.infoq.com/presentations/reactive-programming-evolution
• https://docs.spring.io/spring-framework/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-
reference/html/web-reactive.html
• https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87
• http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-cloud.html

Mais conteúdo relacionado

Mais procurados

[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33Loiane Groner
 
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com JavaExercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com JavaLoiane Groner
 
[Curso Java Basico] Exercicios Aulas 44 a 46
[Curso Java Basico] Exercicios Aulas 44 a 46[Curso Java Basico] Exercicios Aulas 44 a 46
[Curso Java Basico] Exercicios Aulas 44 a 46Loiane Groner
 
[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36Loiane Groner
 
[Curso Java Basico] Exercicios Aula 35
[Curso Java Basico] Exercicios Aula 35[Curso Java Basico] Exercicios Aula 35
[Curso Java Basico] Exercicios Aula 35Loiane Groner
 
[Curso Java Basico] Exercicios Aula 34
[Curso Java Basico] Exercicios Aula 34[Curso Java Basico] Exercicios Aula 34
[Curso Java Basico] Exercicios Aula 34Loiane Groner
 
Diagrama de Atividades - UML
Diagrama de Atividades - UMLDiagrama de Atividades - UML
Diagrama de Atividades - UMLVinícius Barros
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
[Curso Java Basico] Exercicios Aulas 25 a 27
[Curso Java Basico] Exercicios Aulas 25 a 27[Curso Java Basico] Exercicios Aulas 25 a 27
[Curso Java Basico] Exercicios Aulas 25 a 27Loiane Groner
 
[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17Loiane Groner
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08André Phillip Bertoletti
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivityVaishali Modi
 

Mais procurados (20)

[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33
 
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com JavaExercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
 
[Curso Java Basico] Exercicios Aulas 44 a 46
[Curso Java Basico] Exercicios Aulas 44 a 46[Curso Java Basico] Exercicios Aulas 44 a 46
[Curso Java Basico] Exercicios Aulas 44 a 46
 
[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36
 
Exercicios java básico
Exercicios java básicoExercicios java básico
Exercicios java básico
 
[Curso Java Basico] Exercicios Aula 35
[Curso Java Basico] Exercicios Aula 35[Curso Java Basico] Exercicios Aula 35
[Curso Java Basico] Exercicios Aula 35
 
[Curso Java Basico] Exercicios Aula 34
[Curso Java Basico] Exercicios Aula 34[Curso Java Basico] Exercicios Aula 34
[Curso Java Basico] Exercicios Aula 34
 
Diagrama de Atividades - UML
Diagrama de Atividades - UMLDiagrama de Atividades - UML
Diagrama de Atividades - UML
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
[Curso Java Basico] Exercicios Aulas 25 a 27
[Curso Java Basico] Exercicios Aulas 25 a 27[Curso Java Basico] Exercicios Aulas 25 a 27
[Curso Java Basico] Exercicios Aulas 25 a 27
 
Linguagem Java
Linguagem JavaLinguagem Java
Linguagem Java
 
MongoDB and Node.js
MongoDB and Node.jsMongoDB and Node.js
MongoDB and Node.js
 
[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17
 
Programação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a ObjetosProgramação Estruturada e Orientada a Objetos
Programação Estruturada e Orientada a Objetos
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivity
 
Java.util
Java.utilJava.util
Java.util
 
Java Introduction
Java IntroductionJava Introduction
Java Introduction
 

Semelhante a Desmistificando a programação reativa

JS Experience 2017 - Programação reativa com Ionic
JS Experience 2017 - Programação reativa com IonicJS Experience 2017 - Programação reativa com Ionic
JS Experience 2017 - Programação reativa com IoniciMasters
 
Ionic Reativo com RxJS e ngRx
Ionic Reativo com RxJS e ngRxIonic Reativo com RxJS e ngRx
Ionic Reativo com RxJS e ngRxLoiane Groner
 
Microservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFoodMicroservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFoodDevCamp Campinas
 
QCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFoodQCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFoodTiago Marchetti Dolphine
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Loiane Groner
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaDesenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaPaula Santana
 
Angular + Redux (ngRx)
Angular + Redux (ngRx)Angular + Redux (ngRx)
Angular + Redux (ngRx)Loiane Groner
 
Produtividade infinito e além com We.js
Produtividade infinito e além com We.jsProdutividade infinito e além com We.js
Produtividade infinito e além com We.jsAlberto Souza
 
Da Exploração à Produção - Inteligência Artificial com a plataforma Marvin
Da Exploração à Produção - Inteligência Artificial com a plataforma MarvinDa Exploração à Produção - Inteligência Artificial com a plataforma Marvin
Da Exploração à Produção - Inteligência Artificial com a plataforma MarvinDaniel Takabayashi, MSc
 
Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011Marcos Paulo Souza Damasceno
 
Ferramentas de Planejamento e Acompanhamento
Ferramentas de Planejamento e AcompanhamentoFerramentas de Planejamento e Acompanhamento
Ferramentas de Planejamento e AcompanhamentoRodrigo Azevedo
 
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...Luiz Costa
 
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...tdc-globalcode
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 

Semelhante a Desmistificando a programação reativa (20)

JS Experience 2017 - Programação reativa com Ionic
JS Experience 2017 - Programação reativa com IonicJS Experience 2017 - Programação reativa com Ionic
JS Experience 2017 - Programação reativa com Ionic
 
Ionic Reativo com RxJS e ngRx
Ionic Reativo com RxJS e ngRxIonic Reativo com RxJS e ngRx
Ionic Reativo com RxJS e ngRx
 
Microservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFoodMicroservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFood
 
Devcamp 2017 Microservices Reativos
Devcamp 2017   Microservices ReativosDevcamp 2017   Microservices Reativos
Devcamp 2017 Microservices Reativos
 
QCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFoodQCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFood
 
Webinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros ÁgeisWebinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros Ágeis
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Conhecendo o Ruby on Rails
Conhecendo o Ruby on RailsConhecendo o Ruby on Rails
Conhecendo o Ruby on Rails
 
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaDesenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
 
Angular + Redux (ngRx)
Angular + Redux (ngRx)Angular + Redux (ngRx)
Angular + Redux (ngRx)
 
Produtividade infinito e além com We.js
Produtividade infinito e além com We.jsProdutividade infinito e além com We.js
Produtividade infinito e além com We.js
 
Hello ReactJs
Hello ReactJsHello ReactJs
Hello ReactJs
 
Da Exploração à Produção - Inteligência Artificial com a plataforma Marvin
Da Exploração à Produção - Inteligência Artificial com a plataforma MarvinDa Exploração à Produção - Inteligência Artificial com a plataforma Marvin
Da Exploração à Produção - Inteligência Artificial com a plataforma Marvin
 
Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011Arquitetura no Android, realmente importa? - TDC 2011
Arquitetura no Android, realmente importa? - TDC 2011
 
Ferramentas de Planejamento e Acompanhamento
Ferramentas de Planejamento e AcompanhamentoFerramentas de Planejamento e Acompanhamento
Ferramentas de Planejamento e Acompanhamento
 
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
 
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 

Desmistificando a programação reativa