17

Programación reactiva: Guía para desarrolladores

9357Puntos

hace un año

La programación reactiva es un paradigma declarativo que permite responder automáticamente a cambios en los datos, mejorando la eficiencia, robustez y mantenibilidad de las aplicaciones.

Cuando pensamos en FRP (Programación Reactiva Funcional), pensamos en programar con un flujo de datos que cambia. RxJS es una librería muy popular que usa FRP.

Sin embargo, es mucho más que solo FRP en sistemas. Nos adentraremos en el mundo de la programación reactiva y discutiremos sus fundamentos, características, beneficios y aplicaciones para que puedas conocer más y convertirte en experta en este poderoso enfoque de desarrollo.

pr-react.png

¿Cómo funciona la programación reactiva?

El concepto de desarrollo reactivo se basa en el manejo de datos como operadores sobre flujos de datos y eventos en lugar de variables de estado estáticas. Los Observables y los Observadores son elementos fundamentales en este enfoque, ya que permiten gestionar y reaccionar a los cambios en estos flujos de datos.

Junto con la gestión de eventos, también brindan herramientas para manejar errores, filtrar y transformar datos, y combinar varios flujos en un sitio web.

Al adoptar esta metodología, una programadora puede construir tecnología más interactiva y responsiva, especialmente en escenarios que requieren una actualización en tiempo real de la interfaz de usuario o el procesamiento de flujos continuos de datos.

modelo-reactivo.png

Características de la Programación Reactiva: paradigma de programación

Estas son las características clave de la programación reactiva que debes conocer en una aplicación web.

1. Propagación de cambios

Uno de los elementos clave de la programación reactiva es la propagación de cambios. Cuando una variable de datos cambia, todas las dependencias de esa variable son notificadas y actualizadas automáticamente.

2. Asincronía

La programación reactiva maneja la asincronía de forma natura, ya que los flujos de eventos pueden ocurrir en cualquier momento, y los observables pueden emitir eventos en un hilo y ser observados en otro.

3. Tolerancia a fallos

Como tercera característica, este paradigma también permite una mejor tolerancia a fallos. Si ocurre un error en un flujo de eventos, puede ser manejado y aislado sin afectar al resto del sistema.

Ventajas de la Programación Reactiva en aplicaciones web

La programación reactiva tiene múltiples ventajas que mejoran la respuesta de las aplicaciones a los cambios y aumentan la robustez y escalabilidad del software. También promueve código más limpio y mantenible, fomentando la separación de responsabilidades y el enfoque modular en el desarrollo de software.

Esta permite manejar eficientemente múltiples peticiones con un conjunto limitado de hilos, maximizando su utilización, lo que se traduce en una mayor escalabilidad y un arranque más rápido de las aplicaciones. Además, consume menos memoria y CPU, lo que da como resultado un uso más eficiente de los recursos disponibles.

Aunque el modelo de programación reactivo puede complicar el código y hacerlo menos legible, lo que puede dificultar su mantenimiento y depuración, sus ventajas son mayores. Requiere tiempo para aprender y puede ser más complejo de probar. Además, es posible encontrar una falta de librerías reactivas en algunas tecnologías más establecidas, como JDBC.

¿Cuándo usar la programación reactiva?

Este tipo de programación es útil en arquitecturas de micro-servicios donde se necesitan aplicaciones escalables. Sin embargo, es importante tener en cuenta que no todos los casos se benefician de la programación reactiva.

En procesos que involucran un empleo intensivo de CPU, como criptografía, resolución de problemas matemáticos o algoritmos de ordenación, la programación reactiva puede ser más complicada sin mejorar los resultados significativamente.

Por costumbre, si un proceso no requiere un alto número de llamadas a base de datos u otros servicios, o si estas llamadas no se pueden gestionar de manera reactiva, la programación reactiva puede no ser recomendable en esos escenarios específicos.

Para decidir si la programación reactiva es la mejor opción para un proyecto, hay que evaluar cuidadosamente su contexto y requisitos. Si se necesita manejar muchos eventos al mismo tiempo, responder rápidamente a las interacciones del usuario y dar una experiencia de usuario mejor, este es el camino ideal.

Aplicaciones de la Programación Reactiva

La programación reactiva es útil en el desarrollo de aplicaciones de tiempo real, como video, juegos y chat en vivo. También es común en el desarrollo de interfaces de usuario, ya que permite un manejo eficaz de los cambios de estado y los eventos del usuario.

A su vez es una poderosa herramienta para mejorar la calidad de tus aplicaciones. Adoptarla requiere un cambio de mentalidad: en lugar de especificar los pasos exactos que el programa debe seguir, se describen las relaciones entre los datos y se permite que el sistema maneje la propagación de los cambios.

Esto permite manejar la asincronía y los eventos de manera más natural, lo que hace que el desarrollo de software sea más agradable y productivo, y en mundo donde las aplicaciones deben responder a una gran cantidad de eventos en tiempo real, donde esta es esencial. Dale una oportunidad y descubre cómo puede beneficiar tus proyectos.

¿Cómo se implementa la programación reactiva en Spring?

En Spring, se utilizan principalmente dos librerías para programación reactiva: RxJava y Reactor. Aunque ambas son opciones válidas, Spring da preferencia a Reactor, que se basa en Reactive Streams. En el ecosistema de Reactor, encontramos dos componentes principales que son fundamentales: Mono y Flux.

Estos elementos ayudan a manejar objetos individuales y conjuntos de objetos. En la ilustración 1 se muestra un ejemplo gráfico del Flujo Mono y en la ilustración 2 se muestra un ejemplo gráfico del Flujo Flux.

Los componentes ofrecen varias funciones, como la agregación, separación y control de flujo. Spring proporciona una biblioteca web específica para el desarrollo reactivo llamada WebFlux, la cual reemplaza la biblioteca web tradicional y utiliza, por defecto, el servidor Netty en lugar de Tomcat.

Ejemplo en programación imperativa:

@GetMapping("/elemento")
publicElemento get(){
Elemento elemento = redisService.getElemento();

if (elemento == null) {
    elemento = databaseService.getElemento();
    redisService.saveElemento(elemento);
}

return elemento;
@GetMapping("/elemento")
public Mono<Elemento> get() {
returnredisService.getElemento()
.switchIfEmpty(databaseService.getElemento()
.doOnNext(redisService::saveElemento));
}

En ambos casos se recupera un elemento de Redis. Si no existe, se busca en la base de datos y se guarda para futuras referencias. En el ejemplo reactivo, la función get() devuelve un Mono que representa la referencia al código que recuperará el elemento. Spring espera a que se complete el Mono para enviar la respuesta.

Ambas programaciones manejan el caso en que el elemento no existe en la base de datos. En la programación imperativa se lanza una excepción, mientras que en la programación reactiva se emplea Mono.Error. Este paradigma mejora el rendimiento y capacidad de respuesta de tus aplicaciones al manejar solicitudes concurrentes y operaciones asíncronas de manera eficiente y escalable.

Samuel
Samuel
iosamuel

9357Puntos

hace un año

Todas sus entradas
Escribe tu comentario
+ 2
4
30914Puntos

Te postulo para dar un curso más detallado de programación reactiva en platzi.