Reactive extensions - secondnug

22
Bienvenido al mundo reactivo con: Reactive Extensions (Rx) Por Fernando Escolar

description

La presentación sobre reacti

Transcript of Reactive extensions - secondnug

Page 1: Reactive extensions - secondnug

Bienvenido al mundo reactivo con: Reactive Extensions (Rx)

Por Fernando Escolar

Page 2: Reactive extensions - secondnug

reactive extensions

contexto

@SecondNug@fernandoescolar

the cloudclient

application

uievent-based

asynchronous communication

Page 3: Reactive extensions - secondnug

reactive extensions

• Basada en flujos de datos y propagación de cambios.

reactive programming

Tradicional Reactiva

@SecondNug@fernandoescolar

Page 4: Reactive extensions - secondnug

reactive extensions

• Microsoft Live Labs - Erik Meijer“Rx es una librería para componer programas asíncronos y basados en eventos usando colecciones observables”

• Dualidad matemática entre el patrón iterator y el observer.

@SecondNug@fernandoescolar

definición

Page 5: Reactive extensions - secondnug

reactive extensions

• Microsoft Live Labs - Erik Meijer“Rx es una librería para componer programas asíncronos y basados en eventos usando colecciones observables”

• Dualidad matemática entre el patrón iterator y el observer.

@SecondNug@fernandoescolar

definición

Rx = Observables + Linq + Schedulers“

Page 6: Reactive extensions - secondnug

reactive extensions

Nuget Web

instalación

@SecondNug@fernandoescolar

Page 7: Reactive extensions - secondnug

reactive extensions

patrón iterator

@SecondNug@fernandoescolar

Page 8: Reactive extensions - secondnug

reactive extensions

patrón observer

@SecondNug@fernandoescolar

Page 9: Reactive extensions - secondnug

reactive extensions

@SecondNug@fernandoescolar

formula

Rx = Observables + Linq + Schedulers“

Page 10: Reactive extensions - secondnug

reactive extensions

ISubject<T>: IObservable<T>,IObserver<T>

Tipos:• Subject<T>• ReplaySubject<T>• BehaviorSubject<T>• AsyncSubject<T>

sujetos

@SecondNug@fernandoescolar

Page 11: Reactive extensions - secondnug

reactive extensions

Rx vs. events

@SecondNug@fernandoescolar

Eventos: Declaración event Action<string> Notified;

Suscripción Action<string> OnNotified =  s => Console.WriteLine(s); Notified += OnNotified;

Publicación Notified("hello");

Desuscripción Notified -= OnNotified;

Sujetos: Declaración ISubject<string> Changed =  new Subject<string>();

Suscripción var disposable =  Changed.Subscribe( s => Console.WriteLine(s));

Publicación Changed.OnNext ("hello");

Desuscripción disposable.Dispose();

Page 12: Reactive extensions - secondnug

reactive extensions

• Create• CreateWithDisposable• Defer• Empty• FromAsyncPattern• FromEvent• Generate• GenerateInSequence• Interval

observable: creadores

@SecondNug@fernandoescolar

• Never• Range• Repeat• Return• Start• StartWith• Throw• Timer• Using

Page 13: Reactive extensions - secondnug

reactive extensions

@SecondNug@fernandoescolar

formula

Rx = Observables + Linq + Schedulers“

Page 14: Reactive extensions - secondnug

reactive extensions

• Dispatcher: Programa en el dispatcher actual. • NewThread: Lo programa en un nuevo hilo.• ThreadPool: Lo encola en la threadPool.• TaskPool: En la Pool de task (Parallel)• Inmediate: Lo ejecuta inmediatamente, sin

programar.• CurrentThread: La programa para ejecutarse

en el hilo actual.

scheduler

@SecondNug@fernandoescolar

Page 15: Reactive extensions - secondnug

reactive extensions

@SecondNug@fernandoescolar

formula

Rx = Observables + Linq + Schedulers“

Page 16: Reactive extensions - secondnug

reactive extensions

• SubscribeOn• SubscribeOnDispatcher• Switch• Synchronize• Take• TakeWhile• Throttle• TimeInterval• Timeout• Timestamp• Until• WaitUntil• Where• Yield• Zip

observable: operadores i.

@SecondNug@fernandoescolar

• Merge• ObserveOn• ObserveOnDispatcher• OnErrorResumeNext• Remotable• RemoveTimeInterval• RemoveTimestamp• Repeat• Retry• Sample• Scan• Select• SelectMany• Skip• SkipWhile• SkipUntil

• Amb• Asynchronous• Buffer• BufferWithTime• Catch• CombineLatest• Concat• Delay• Dematerialize• Do• Finally• GroupBy• Hide• HoldUntilChanged• Let• Materialize

Page 17: Reactive extensions - secondnug

reactive extensions

• Evaluadores: Agregarte And Contains Count First FirstOrDefault GetEnumerator Last LastOrDefault Latest LatestValue LongCount MostRecent MostRecentValue Next NextValue Single SingleOrDefault ToEnumerable

observable: operadores ii.

@SecondNug@fernandoescolar

• Uniones: Join Then

• Otras: Prune Publish Record Replay

Page 18: Reactive extensions - secondnug

reactive extensions

Rx vs. events

@SecondNug@fernandoescolar

Eventos: Declaración event Action<string> Notified;

Suscripción Action<string> OnNotified =  s => Console.WriteLine(s); Notified += OnNotified;

Publicación Notified("hello");

Desuscripción Notified -= OnNotified;

Sujetos: Declaración ISubject<string> Changed =  new Subject<string>();

Suscripción var disposable =  Changed.Subscribe( s => Console.WriteLine(s));

Publicación Changed.OnNext ("hello");

Desuscripción disposable.Dispose();

Page 19: Reactive extensions - secondnug

reactive extensions

Convertir un cualquier evento en observable:

Linq2Events

@SecondNug@fernandoescolar

Page 20: Reactive extensions - secondnug

reactive extensions

Ejemplos útiles en diversas aplicaciones:

- WPF Drag ‘n Drop- Reactive EventAggregator- Twitter

Ejemplos

@SecondNug@fernandoescolar

Page 21: Reactive extensions - secondnug

reactive extensions

ruegos y preguntas

@SecondNug@fernandoescolar

Page 22: Reactive extensions - secondnug

reactive extensions

¡Muchas gracias a todos!

• Agradecimientos: SecondNug y concretamente a Alfredo Fernández Pablo Bouzada Javier Jimenez (rx: first contact)

• Enlaces de interés http://en.wikipedia.org/wiki/Reactive_programming http://en.wikipedia.org/wiki/Observer_pattern http://en.wikipedia.org/wiki/Iterator_pattern http://www.dofactory.com/Patterns/PatternIterator.aspx http://www.minddriven.de/index.php/technology/dot-net/reactive-framework-rx-first-look http://www.silverlightshow.net/items/Using-Reactive-Extensions-in-Silverlight.aspx http://leecampbell.blogspot.com/2010/08/reactive-extensions-for-net.html http://rxwiki.wikidot.com/101samples

despedida

@SecondNug@fernandoescolar