Programando interfaces reativas com Xamarin e Reactive UI

Preview:

Citation preview

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

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

Recommended