A simplicidade do RxJava com consultas N1QL e Couchbase

Você já tentou consultar Couchbase usando o N1QL e a API síncrona do Java SDK? Ela funciona bem e não é particularmente difícil, mas acho que é um pouco confusa e, bem, síncrona. Há algumas maneiras diferentes de resolver isso. Você pode escrever um código melhor ou pode dar uma olhada no RxJava, que recentemente começou a me agradar.

Caso você não esteja familiarizado com o RxJava, ele é um conjunto de extensões reativas para Java semelhante ao Rx.NET e ao RxJS. A grande vantagem é que o Couchbase Java SDK se integra muito bem a esse conjunto de extensões. Vamos dar uma olhada em alguns trechos de código Java que aproveitam ao máximo o RxJava com N1QL.

Digamos que temos o código de consulta síncrona muito simples que segue:

No exemplo acima, temos uma consulta N1QL simples. Após a execução da consulta, obtemos um conjunto de resultados que percorremos em loop e convertemos em um arquivo Java Mapa e adicionar a um Lista. Por fim, retornamos os resultados analisados. Essa análise é comum quando se trabalha com aplicativos do Spring Boot, mas não se limita a isso.

Embora o código acima não tenha sido particularmente difícil, havia muita coisa acontecendo. Com o RxJava, o código acima pode ser convertido no seguinte:

Tudo bem, você me pegou! O código RxJava tem mais linhas, mas isso significa que ele é mais complicado ou bagunçado?

O RxJava usa observáveis que podem ser considerados valores ao longo do tempo. Eles são assíncronos e podem conter uma cadeia de operações à medida que os dados fluem pelo pipeline. Por exemplo, em nosso código acima, executamos a consulta N1QL de forma assíncrona. A consulta .flatMap fará transformações assíncronas nos dados que são retornados na consulta de AsyncN1qlQueryResult para digitar AsyncN1qlQueryRow e o .mapa transformará cada uma das linhas retornadas em um arquivo Java Mapa. Porque queremos um Lista de Java Mapa podemos chamar toList que fará exatamente isso. Como não queremos trabalhar com um observável, no final chamamos toBlocking que converte o resultado em um valor iterável ou, no nosso caso, em algo com que a função pai ou talvez o front-end possa trabalhar. Por fim, terminamos com .single porque sabemos que só retornaremos uma vez Lista.

O RxJava é poderoso e pode ser aplicado a coisas muito mais complicadas do que o exemplo acima. O que importa aqui é que ele é simples de usar e oferece uma abordagem baseada em eventos para a manipulação assíncrona de dados.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixar uma resposta