Post on 21-Feb-2017
Programando interfaces reativas com Xamarin e
ReactiveUI
Mahmoud Ali
Desenvolvedor @ Lambda3
@akamud | akamud@apache.org
Interfaces reativas
Usuários esperam interfaces reativas e respostas em milisegundos e 100% de disponibilidade
Seu sistema precisa ser resistente a falhas
http://www.reactivemanifesto.org/pt-BR
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
• “LINQ para eventos”
• Conceitos de paradigma funcional
• Utiliza o design pattern: Observer
• Portada para várias linguagens: Javascript, Java, Ruby, Python...
Streams
• Funciona como uma esteira de produção
• É uma sequência de eventos ordenados por tempo
• É a base do Rx (IObservable<T> no .NET)
• É assíncrono e push-based
• Podem ser transformados de diversas maneiras
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 disposables
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
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 (filewatcher)
• Eventos real-time
• Eventos de UI
• Streams (ex.: rede)
Quem está usando
Demo: Rx
Observable.Range
Buffer
ReactiveUI (RxUI)
Framework open source para facilitar a utilização de Rx na criação de interfaces reativas em qualquer plataforma, reaproveitando código
ReactiveUI
Também é um framework MVVM
ReactiveUI
Disponibiliza uma série de helpers para facilitar a criação das interfaces:
• Bind
• ObservableAsPropertyHelper
• ReactiveCommands
• ReactiveAdapters
Demo: ReactiveUI
DistinctUntilChanged
Switch
Referências
• The introduction to Reactive Programming you've been missing
• http://rxmarbles.com/
• http://www.introtorx.com/
• https://reactivex.slack.com/
• http://reactiveui.net/
• http://bit.ly/rxui-xamarin
• https://github.com/akamud/HackDaysRxUI (Este código)
Obrigado!@akamud