SlideShare uma empresa Scribd logo
1 de 30
Interfaces reativas
com ReactiveUI no
Xamarin.Forms
Mahmoud Ali
@akamud
Developer @ Lambda3
Microsoft MVP
Interfaces Reativas
○ Usuários esperam interfaces reativas e respostas em
milisegundos e 100% de disponibilidade
○ Seu sistema precisa ser resistente a falhas
https://www.reactivemanifesto.org/pt-BR
Complexidades de interfaces reativas
○ Responsividade
○ Disponibilidade
○ Refresh instantâneo
○ Tratamento de erros
○ Carregamento
○ Políticas de retry
Reactive Extensions (Rx)
Reactive Extensions é uma biblioteca para compor programas
assíncronos e orientados a eventos utilizando observables e
operadores LINQ-style.
Reactive Extensions
○ Criado pela Microsoft pelo mesmo time de
desenvolvedores do LINQ
○ Conceitos de paradigma funcional
○ Utiliza o design pattern: Observer
○ Portada para várias linguagens: Javascript,
Java, Ruby, Python...
○ Todo baseado no conceito de streams
○ Possui uma série de operadores para
transformar streams
Erik Meijer
Streams
Streams
○ Funciona como uma esteira de produção
○ É uma sequência de eventos ordenados por tempo
○ É a base do Rx (Observable<T> no .NET)
○ É assíncrono e push-based
○ Podem ser transformados de diversas maneiras
Streams, só que mais vida loka
Streams
○ Quem quiser tratar o conteúdo que está passando pela
esteira precisa dar um subscribe
○ No padrão Observer: o stream (IObservable) é o subject, o
subscriber é o observer
○ Emite três estados: OnNext, OnError e OnCompleted
○ São imutáveis
○ São disposables
Streams
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
Síncrono x Assíncrono
Um item Múltiplos itens
Síncrono T Get() IEnumerable<T> Get()
Assíncrono Task<T> Get() Observable<T> Get()
Síncrono x Assíncrono - Pessoa
Um item Múltiplos itens
Síncrono Pessoa ObterPessoa()
IEnumerable<Pessoa>
ObterPessoas()
Assíncrono
Task<Pessoa>
ObterPessoa()
Observable<Pessoa>
ObterPessoas()
Streams
○ Tudo pode ser transformado em um stream:
○ Cliques de mouse
○ Teclas digitadas
○ Tasks assíncronas
○ Timers
○ Inclusive streams
Streams
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
Onde usar?
○ Eventos que dependem de infraestrutura (FileWatchers)
○ Eventos real-time
○ Eventos de UI
○ Streams (ex.: rede)
Quem usa?
Demo:
Reactive Extensions
Observable.Range
Throttle (debounce)
Buffer
ReactiveUI (RxUI)
○ Framework open source para facilitar a utilização de Reactive
Extensions na criação de interfaces reativas em qualquer
plataforma, reaproveitando código
ReactiveUI
○ Também é um framework MVVM
ReactiveUI
o Disponibiliza uma série de helpers para facilitar a criação das
interfaces:
• Bindings
• Ciclo de vida
• ObservableAsPropertyHelper
• ReactiveCommands
• ReactiveAdapters
“Mas o Xamarin.Forms já é um framework MVVM, eu
preciso de outro?
Demo:
ReactiveUI
Referências
○ The introduction to Reactive Programming you've been
missing
○ http://reactivex.io/
○ http://rxmarbles.com/
○ http://www.introtorx.com/
○ http://reactiveui.net/
○ https://bitbucket.org/achary/rx-marbles/
○ https://github.com/toggl/mobileapp/
○ https://github.com/akamud/XamarinForms.RxUI
Obrigado!
Perguntas?
@akamud

Mais conteúdo relacionado

Semelhante a Interfaces reativas com ReactiveUI no Xamarin.Forms

Programando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UIProgramando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UIMahmoud Ali Neto
 
Programando interfaces reativas com ReacitveUI na plataforma Xamarin
Programando interfaces reativas com ReacitveUI na plataforma XamarinProgramando interfaces reativas com ReacitveUI na plataforma Xamarin
Programando interfaces reativas com ReacitveUI na plataforma Xamarinakamud
 
RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.Clerton Leal
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...tdc-globalcode
 
TDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJSTDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJStdc-globalcode
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialFabio Spanhol
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webAlvaro Oliveira
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.xNorton Guimarães
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com pythonUFPA
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaDaniel Baptista Dias
 
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
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novoGiovanni Bassi
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
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
 

Semelhante a Interfaces reativas com ReactiveUI no Xamarin.Forms (20)

Programando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UIProgramando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UI
 
Programando interfaces reativas com ReacitveUI na plataforma Xamarin
Programando interfaces reativas com ReacitveUI na plataforma XamarinProgramando interfaces reativas com ReacitveUI na plataforma Xamarin
Programando interfaces reativas com ReacitveUI na plataforma Xamarin
 
RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
TDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJSTDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJS
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.x
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com python
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
 
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
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
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
 
Aula python
Aula pythonAula python
Aula python
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
OpenIoT
OpenIoT OpenIoT
OpenIoT
 

Mais de akamud

.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?akamud
 
Hacktoberfest - Contribuindo com Open Source
Hacktoberfest  - Contribuindo com Open SourceHacktoberfest  - Contribuindo com Open Source
Hacktoberfest - Contribuindo com Open Sourceakamud
 
Automatizando os testes da sua aplicação hoje
Automatizando os testes da sua aplicação hojeAutomatizando os testes da sua aplicação hoje
Automatizando os testes da sua aplicação hojeakamud
 
Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...
Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...
Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...akamud
 
.NET MAUI - O futuro do desenvolvimento de apps no .NET
.NET MAUI - O futuro do desenvolvimento de apps no .NET.NET MAUI - O futuro do desenvolvimento de apps no .NET
.NET MAUI - O futuro do desenvolvimento de apps no .NETakamud
 
Azure DevOps + App Center: DevOps multi-staging para seu app
Azure DevOps + App Center: DevOps multi-staging para seu appAzure DevOps + App Center: DevOps multi-staging para seu app
Azure DevOps + App Center: DevOps multi-staging para seu appakamud
 
O Futuro do .NET
O Futuro do .NETO Futuro do .NET
O Futuro do .NETakamud
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019akamud
 
Mobile Development Simplified with Xamarin
Mobile Development Simplified with XamarinMobile Development Simplified with Xamarin
Mobile Development Simplified with Xamarinakamud
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileakamud
 
Desenvolvimento cross-platform em C# com Xamarin - 2018
Desenvolvimento cross-platform em C# com Xamarin - 2018Desenvolvimento cross-platform em C# com Xamarin - 2018
Desenvolvimento cross-platform em C# com Xamarin - 2018akamud
 
O que há de novo no Xamarin.Forms
O que há de novo no Xamarin.FormsO que há de novo no Xamarin.Forms
O que há de novo no Xamarin.Formsakamud
 
Xamarin em 7 minutos
Xamarin em 7 minutosXamarin em 7 minutos
Xamarin em 7 minutosakamud
 
Automatizando tudo no mundo mobile com fastlane
Automatizando tudo no mundo mobile com fastlaneAutomatizando tudo no mundo mobile com fastlane
Automatizando tudo no mundo mobile com fastlaneakamud
 
Tornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com PrismTornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com Prismakamud
 
Animações com Xamarin.Forms
Animações com Xamarin.FormsAnimações com Xamarin.Forms
Animações com Xamarin.Formsakamud
 
Instrumentação completa com Visual Studio Mobile Center
Instrumentação completa com Visual Studio Mobile CenterInstrumentação completa com Visual Studio Mobile Center
Instrumentação completa com Visual Studio Mobile Centerakamud
 
Xamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveis
Xamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveisXamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveis
Xamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveisakamud
 
Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...akamud
 
Publiquei meu site e não funcionou, e agora?
Publiquei meu site e não funcionou, e agora?Publiquei meu site e não funcionou, e agora?
Publiquei meu site e não funcionou, e agora?akamud
 

Mais de akamud (20)

.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
Hacktoberfest - Contribuindo com Open Source
Hacktoberfest  - Contribuindo com Open SourceHacktoberfest  - Contribuindo com Open Source
Hacktoberfest - Contribuindo com Open Source
 
Automatizando os testes da sua aplicação hoje
Automatizando os testes da sua aplicação hojeAutomatizando os testes da sua aplicação hoje
Automatizando os testes da sua aplicação hoje
 
Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...
Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...
Indo além do Enterprise: fazendo aplicativos para usuários finais com Xamarin...
 
.NET MAUI - O futuro do desenvolvimento de apps no .NET
.NET MAUI - O futuro do desenvolvimento de apps no .NET.NET MAUI - O futuro do desenvolvimento de apps no .NET
.NET MAUI - O futuro do desenvolvimento de apps no .NET
 
Azure DevOps + App Center: DevOps multi-staging para seu app
Azure DevOps + App Center: DevOps multi-staging para seu appAzure DevOps + App Center: DevOps multi-staging para seu app
Azure DevOps + App Center: DevOps multi-staging para seu app
 
O Futuro do .NET
O Futuro do .NETO Futuro do .NET
O Futuro do .NET
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile - Capi Conf 2019
 
Mobile Development Simplified with Xamarin
Mobile Development Simplified with XamarinMobile Development Simplified with Xamarin
Mobile Development Simplified with Xamarin
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
 
Desenvolvimento cross-platform em C# com Xamarin - 2018
Desenvolvimento cross-platform em C# com Xamarin - 2018Desenvolvimento cross-platform em C# com Xamarin - 2018
Desenvolvimento cross-platform em C# com Xamarin - 2018
 
O que há de novo no Xamarin.Forms
O que há de novo no Xamarin.FormsO que há de novo no Xamarin.Forms
O que há de novo no Xamarin.Forms
 
Xamarin em 7 minutos
Xamarin em 7 minutosXamarin em 7 minutos
Xamarin em 7 minutos
 
Automatizando tudo no mundo mobile com fastlane
Automatizando tudo no mundo mobile com fastlaneAutomatizando tudo no mundo mobile com fastlane
Automatizando tudo no mundo mobile com fastlane
 
Tornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com PrismTornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com Prism
 
Animações com Xamarin.Forms
Animações com Xamarin.FormsAnimações com Xamarin.Forms
Animações com Xamarin.Forms
 
Instrumentação completa com Visual Studio Mobile Center
Instrumentação completa com Visual Studio Mobile CenterInstrumentação completa com Visual Studio Mobile Center
Instrumentação completa com Visual Studio Mobile Center
 
Xamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveis
Xamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveisXamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveis
Xamarin Forms: O caminho para 100% de código compartilhado em aplicativos móveis
 
Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação completa para sua aplicação Mobile com Visual Studio Mobile Ce...
 
Publiquei meu site e não funcionou, e agora?
Publiquei meu site e não funcionou, e agora?Publiquei meu site e não funcionou, e agora?
Publiquei meu site e não funcionou, e agora?
 

Interfaces reativas com ReactiveUI no Xamarin.Forms