La sencillez de RxJava con consultas N1QL y Couchbase

¿Ha intentado alguna vez consultar Couchbase usando N1QL y el Java SDK's API síncrono? Funciona bien y no es particularmente difícil, pero me parece que es un poco desordenado, y bueno, síncrono. Hay varias maneras de solucionar esto. Usted podría escribir mejor código, o puede echar un vistazo a RxJava que recientemente ha comenzado a crecer en mí.

En caso de que no estés familiarizado con RxJava, es un conjunto de extensiones reactivas para Java similar a Rx.NET y RxJS. Lo bueno es que el Couchbase Java SDK se integra muy bien con este conjunto de extensiones. Vamos a echar un vistazo a algunos fragmentos de código Java que aprovecha al máximo RxJava con N1QL.

Digamos que tenemos el código de consulta síncrona muy simple que sigue:

En el ejemplo anterior tenemos una simple consulta N1QL. Tras ejecutar la consulta, obtenemos un conjunto de resultados que recorremos en bucle y convertimos en un archivo Java Mapa y añadir a un Lista. Finalmente devolvemos los resultados parseados. Este análisis es común cuando se trabaja con aplicaciones Spring Boot, pero no limitado a.

Aunque el código anterior no era particularmente difícil, había mucho que hacer. Con RxJava, el código anterior se puede convertir en el siguiente:

Muy bien, ¡me has pillado! El código RxJava tiene más líneas, pero ¿significa eso que es más complicado o desordenado?

RxJava utiliza observables que pueden considerarse valores en el tiempo. Son asíncronos y pueden contener una cadena de operaciones a medida que los datos fluyen a través del pipeline. Por ejemplo, en nuestro código anterior ejecutamos la consulta N1QL de forma asíncrona. El .flatMap realizará transformaciones asíncronas contra los datos que se devuelven en la consulta de AsyncN1qlQueryResultado escribir AsyncN1qlQueryRow y el .mapa transformará cada una de las filas devueltas en un archivo Java Mapa. Porque queremos un Lista de Java Mapa podemos llamar toList que hará exactamente eso. Como no queremos trabajar con un observable al final llamamos a toBlocking que convierte el resultado en un valor iterable, o en nuestro caso, algo con lo que la función padre o quizás el front-end pueda trabajar. Finalmente terminamos con .single porque sabemos que sólo devolveremos uno Lista.

RxJava es potente y puede aplicarse a cosas mucho más complicadas que el ejemplo anterior. El punto aquí es que es fácil de usar y proporciona un enfoque basado en eventos para la manipulación asíncrona de datos.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Dejar una respuesta