Meteor.js: um framework além do MVC

Há um ano eu estava pesquisando frameworks web em Node.js e me deparei com o Meteor.js. Desde então tenho gasto algum tempo estudando e testando a plataforma.

A primeira coisa que me deixou curioso foi o fato do Meteor não ser MVC. Boa parte dos frameworks web que temos em atividade hoje em dia são reimplementações do Rails (para os "full stacks"), ou do Sinatra (no caso dos microframeworks) só que em outras linguagens. Contudo, o Rails completou 10 anos e me parece ser esta uma boa hora para encontrar um paradigma que seja melhor do que o já batido "Model, View, Controller".

Um conceito fundamental na arquitetura do Meteor é a reatividade. Todo aplicativo feito com ele é, desde o início, um "single page application". Afinal, faz pouco sentido, nos dias de hoje, ficar renderizando HTML no lado do servidor e servindo estaticamente para o navegador.

Ao invés disso, o framework cria uma "espécie de API", cujo cliente monitora qualquer mudança, sendo que apenas dados trafegam de um lado ao outro. Quando algum dado é modificado no lado do cliente, essa mudança se reflete automaticamente no servidor e vice-versa. Além da enorme facilidade que isso traz ao trabalho do desenvolvedor, a aplicação fica bastante responsiva, pois não é mais necessário baixar a página inteira novamente e renderizar todo o conteúdo simplesmente porque uma pequena parte precisa ser atualizada. Nunca foi tão simples fazer AJAX.

Por conta disso, ser "mobile first" fica fácil uma vez que a API encontra-se pronta. O Meteor possui integração nativa com o Apache Cordova, ao ponto de tornar a criação de uma aplicação Android ou iOS apenas uma especificidade dentro do mesmo fluxo de desenvolvimento, o que exige literalmente, algumas poucas linhas de código a mais. Boa parte dele será compartilhada com o servidor e o cliente, de forma que você só precisa se preocupar em criar aquilo que é específico dos dispositivos móveis.

Qualquer linguagem de programação moderna conta com gerenciamento de pacotes e dependências: o Ruby tem as Gems, o Python tem o Pip, o Perl faz uso do CPAN, o PHP do Composer e mesmo o Node.js possui o NPM. Apesar de ser tranquilamente possível fazer uso de módulos NPM no Meteor, este possui seu próprio repositório de pacotes: o Atmosphere. A diferença é que os pacotes no Atmosphere são adaptados para fazerem uso da reatividade presente no framework e podem também conter "partials" (segmentos de código HTML dinâmico) que podem ser usados facilmente para acelerar a criação dos templates.

Aliás, o Meteor possui o Blaze, seu próprio engine de templates baseado no Handlebars e que se mostra extremamente simples e poderoso de usar. Contudo, por transferir apenas dados entre o servidor e cliente, o Blaze pode ser facilmente substituído pelo Angular ou React.js, bem ao gosto do freguês.
Há muito mais para ser dito sobre o Meteor e caso você tenha se interessado por ele, sugiro dar uma olhada mais aprofundada, a começar pelo site do projeto: www.meteor.com.

Texto publicado originalmente na revista Locaweb #57