Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reactive Extensions - Intro en Español

Reactive Extensions - Intro en Español

40 minutes Rx intro based on the material that Paul Betts generously shared with us. Some code samples were shown during the presentation.

Charla de 40 mins de Reactive Extensions, basada en el material que generosamente compartió con nosotros Paul Betts. Durante la presentación se mostraron algunos samples de código.

Avatar for Sebastián Monía

Sebastián Monía

October 16, 2012

Other Decks in Programming

Transcript

  1. Reactive Extensions AKA Rx Reactive Extensions (Rx) es una librería

    que provee herramientas para componer programas asíncronos y basados en eventos mediante el uso de secuencias observables y operadores de estilo LINQ.
  2. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Agenda ¿Qué es LINQ y qué es Rx? Patrón observador IObservable<out T> y IObserver<in T> Algunos Ejemplos Simples Y el resto… ¿Y que más? Preguntas/Discusión Recursos Nos vamos
  3. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 LINQ - Surgió de un proyecto de investigación de Microsoft llamado C. - Empezó como una extensión de .NET que provee formas fáciles para transformar y consultar colecciones, datos relacionales y documentos XML. A partir de la versión 3.5 de .NET forma parte del framework. - Agrega comportamiento declarativo para trabajar con colecciones en .NET. Rx - Fueron creadas en 2009 como parte de los DevLabs de Microsoft. - Es una librería que permite a los programadores escribir código breve y declarativo para orquestar y coordinar programas asíncronos y/o basados en eventos, todo basado en herramientas y patrones familiares de .NET - Provee herramientas para manipular e integrar eventos asíncronos. Un ejemplo de esto sería poder coordinar múltiples streams de datos a medida que nos llegan desde algún lugar de la nube. - La idea detrás de Rx es posibilitar un manejo de eventos más fácil de entender y de mantener. ¿Qué es LINQ y qué es Rx?
  4. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Estructura Patrón observador
  5. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Participantes Sujeto - Conoce a sus observadores. Cualquier número de objetos pueden estar observándolo. - Provee una interfaz para acoplar* y desacoplar* observadores. Observador - Define una interfaz de actualización para objetos a los que se les deben notificar cambios. Sujeto Concreto - Guarda estados de interés para los Observadores Concretos. - Envía notificaciones a sus observadores cuando su estado cambia. Observador Concreto - Mantiene una referencia a un objeto de tipo sujeto concreto. - Posee un estado que debe mantenerse consistente con el del sujeto. - Implementa una interfaz de actualización para mantener su estado consistente con el del sujeto.
  6. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 IObservable<out T> y IObserver<in T> Las interfaces clave para Rx, comparables con IEnumerable<out T> e IEnumerator<in T>, son IObservable<out T> e IObserver<in T>. Para recibir notificaciones de una colección observable usamos el método Subscribe y le pasamos un observador. Subscribe devuelve un IDisposable, que podemos usar como punto de acceso para detener la subscripción al observable y Rx maneja toda la lógica de subscripción y des- subscripción. El observador que le pasamos a Subscribe soporta (al menos) tres métodos, como lo muestra la definición. OnNext devuelve el próximo valor en la colección a medida que está disponible. OnCompleted señala el final de la colección. OnError señala que ha habido una excepción y nos ofrece la oportunidad de manejar el error.
  7. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Algunos ejemplos simples Tenemos los llamados “cold observables”, estos son observables que empiezan a producir valores en el momento en que alguien se suscribe a ellos.
  8. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Al crear un observable vacío vemos que solo tenemos el evento de OnCompleted ya que el stream de eventos está vacío.
  9. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 La capacidad de usar operadores LINQ nos permite filtrar eventos muy fácilmente (imaginen esto con eventos tradicionales).
  10. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Ejemplo muy simple, usando throttling.
  11. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Otro ejemplo, en este caso, estamos haciendo mover a una imagen en un canvas con muy poco esfuerzo.
  12. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Rx provee una gran cantidad de operaciones para verlas todas, algunas de las que omitimos son: Range: Creamos un cold observable a través de un array. Window: Nos permite segmentar de forma ordenada nuestra colección futura en ventanas usando varios criterios. Buffer: Lo mismo que Window, más simple, pero pierde el orden. Timeout: Nos permite definir un timeout para operaciones asíncronas- Retry: Es muy común usarlo en conjunto con el Timeout para definir reintentos antes de “darse por vencido”. FromAsyncPattern: Nos permite convertir a Observable el resultado de el típico patrón de eventos BeginXXX / EndXXX. Y quedan muchas más. Y el resto
  13. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Nos permite ensamblar los eventos que necesitamos a partir de los que tenemos de manera declarativa, sin preocuparnos por threads, locks and all that jazz. Los conceptos fundamentales detrás de Rx (Reactive programming) son válidos no sólo para C#. Es por esto que Rx también fue desarrollado para javascript. La librería ReactiveUI es un framework (no desarrollado por Microsoft) que toma todas las clases tradicionales de una arquitectura MVVM y simplifica mucho la complejidad asociada con la interacción entre Rx y la interfaz de usuario. Rx es muy útil para testing. Operadores como Timeout, Delay y Window nos permiten orquestar de manera mucho más simple las complejidades asociadas al testing de procesos asíncronos. ¿Y que más?
  14. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Preguntas/Discusión
  15. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Sitio de Paul Betts: http://blog.paulbetts.org/ Programming Reactive Extensions and LINQ: http://www.apress.com/9781430237471 Reactive Programming: http://stackoverflow.com/questions/1028250/what-is-functional- reactive-programming ReactiveUI: http://www.reactiveui.net/ IDisposable y Rx: http://stackoverflow.com/questions/5227823/keeping-references-to- idisposable-when-using-the-reactive-extensions-for-net Recursos
  16. No imprima este documento si no es necesario. Protejamos el

    medio ambiente. Reactive Extensions | Octubre 16, 2012 Nos vamos
  17. ARGENTINA Clay 2954 Capital Federal (C1426DLD) tel: 54+11+5299 5400 Belgrano

    133 - Piso 2 Bahía Blanca, Buenos Aires (B8000IJC) San Martín 902 - 1º Piso - Oficina 6 Paraná, Entre Ríos (E3100AAT) Calle 48 N°1165 La Plata, Buenos Aires (1900) tel: 54+11+5299 5400 BRASIL Cardoso de Melo 1470 – 8, Vila Olimpia San Pablo (04548004) tel: 55+11+3045 2193 URUGUAY Roque Graseras 857 Montevideo (11300) tel: 598+2+7117879 USA 12105 Sundance Ct. Reston (20194) tel:+703 842 9455 www.hexacta.com