reactive programmingActualmente, el concepto de programación reactiva, que hace referencia al manejo de flujos de datos asíncronos conocidos como “streams”, ha adquirido protagonismo.

ReactiveX, que es una de las librerías que ofrece este concepto, disponible en múltiples lenguajes de programación, obtiene lo mejor de la programación funcional: el patrón observer o el patrón iterator.

El objetivo es conseguir una aplicación con capacidad de respuesta y una fácil escalabilidad.

Características, ventajas y ejemplos de programación reactiva

Algunas de las ventajas que nos ofrece la programación reactiva son:

Evita callbacks.
• Permite trabajar de manera asíncrona de manera mucho más fácil.
• Simplifica el trabajo.
• Código legible.
• Gran cantidad de operadores.

Los sistemas reactivos según las bases de la programación reactiva han de ser:

• Responsivos: cumplen los tiempos de respuestas establecidos.
Resilientes: se mantienen responsivos incluso en situaciones de error.
Elásticos: se mantienen responsivos aún con una gran carga de trabajo.
Orientados a mensajes: minimizan el acoplamiento entre componentes al establecer un intercambio de mensajes de manera asíncrona.

 

 

reactive programming

 

 

 

 

 

 

 

Para que podáis ver toda la potencia que nos ofrece, os voy a poner un pequeño ejemplo con RxJava2, en el que supondremos que queréis hacer los siguientes pasos:

1. Necesitáis obtener los alumnos menores de 16 años en un clase.
2. Posteriormente, queréis obtener las notas de cada uno.
3. Combinar estos valores.
4. Cada 2 segundos, mandar esta información a vuestra API.
5. Hacerlo en segundo plano.
6. Una vez finalizado, mostrar la información al usuario.

 

 

reactive programming

 

 

 

 

 

 

 

Como podemos observar, la potencia y legibilidad que nos ofrece es inmensa.

Redux-Observable

La programación reactiva puede aplicarse a gran cantidad de lenguajes, los desarrolladores web que usan Redux, ven la necesidad de realizar en ocasiones tareas asíncronas. Existen librerías como Redux-Thunk o Redux-Saga que nos lo permiten, pero en este artículo nos centraremos en el uso de Redux-Observable, queaprovecha toda la potencia de la programación reactiva basándose en el uso de RxJs.

Redux-Observable abstrae la conexión con la store de Redux, maneja todo tipo de suscripciones para no tener que preocuparnos de la escucha o envío de acciones.
¿Cómo hace esto Redux-Observable? Con el uso de Epics: funciones que toman un stream como entrada y devuelven un stream como salida, o en otras palabras reciben una acción y devuelven otra.

Vamos a ver un ejemplo de Epics:

 

 

reactive programming

 

 

 

 

 

 

Como hemos comentado, Redux-Observable maneja todo tipo de acciones, en nuestro ejemplo gracias a ofType capturamos el tipo de acción, posteriormente mapeamos nuestra acción y realizamos la petición ajax, la cual nos devolverá una respuesta, que trataremos, de la manera que necesitamos en este caso, llamando a la función userLogin.

¿Cuál es el auténtico potencial de este tipo de programación?

En el uso de operadores, como podemos observar en el código, tenemos un operador takeUntil que permite cancelar operaciones en caso de que nos llegue una acción determinada. Además de este hay una gran lista de operadores que añaden muchísima más funcionalidad en apenas unas líneas de código; podemos encontrar la lista completa aquí.

Aunque hace 10 años que apareció el concepto de programación reactiva, creo que es ahora cuando se ha convertido en la mejor opción para incluir en nuestros desarrollos. Hacerlo nos permite manejar la asincronía y complejidad de manera sencilla, aprovechando la potencia de la librería ReactiveX que nos ofrece soporte para gran cantidad de lenguajes.

En Teldat utilizamos tecnología Redux para desarrollar ciertas secciones de la solución SD-WAN de Teldat.


Sobre el autor

Rafael Lujan
Rafael Lujan
Ingeniero Informático en el departamento de I+D. Dentro de dicho departamento trabaja en el grupo de Cloud como desarrollador Full-Stack

Comparte este post


Nuestras Soluciones Relevantes



| Etiquetas: