Sunday, May 8, 2016

Os sete princípios de Meteor

Princípio #1 - Dados na fiação

Em resumo, “Não envie HTML pela rede. Envie simplesmente os dados e deixe o programa cliente decidir em como tornar visível esses dados”.  A idéia é enviar JSON para o navegador e ele o renderiza como um template handlebars ou spacebars. A propósito, Spacebars é a linguagem de templates do Meteor, inspirada no Handlebars, mas customizada para produzir templates reativos quando compilada.

Princípio #2 - Uma só linguagem: JavaScript

Quem está acostumado a usar Rails, Python ou Java no lado do servidor, geralmente acredita em utilizar o mínimo de javascript possível. Entretanto, faz muito mais sentido usar no lado do servidor a mesma linguagem que já somos obrigados a usar no navegador (browser).  Isso é perfeitamente válido, pois o Nodejs é uma implementação bastante veloz e efetiva para usar no servidor, e é disponibilizada no Meteor.  Alguns nomes de diretórios (pastas) têm significado especial: ‘server’ e ‘client’ contém programas que irão ser executadas somente no servidor ou navegador (cliente) respectivamente. O diretório ‘lib’ por sua vez será executado em ambos. O ‘public’ será considerado a raiz nas urls do servidor.

Princípio #3 - Banco de dados em todos os lugares

A mesma API (interface de programação) funciona tanto no lado do servidor como no lado do cliente. Utilizando MongoDB no servidor e Minimongo (uma mímica do MongoDB), as mesmas Collections podem ser acessadas no código que irá rodar no servidor ou cliente. A replicação dos dados será feita através do protocolo DDP (que falaremos adiante) transparentemente para o programador.

Princípio #4 - Compensação de latência

Uma simulação dos modelos e prefetching dos dados do banco é feita de forma que a conexão com o mongodb no servidor nos dá a impressão de ser local, praticamente sem retardos.

Princípio #5 - Reatividade de todo o stack

O default de todas as operações é “executar em tempo real” (real time). Todas as camadas, desde o banco de dados ao template possuem uma interface event-driven, ou seja, que pode ser controlada via eventos. Ao clicar um botão, ou digitar alguns caracteres, o usuário vê uma resposta imediata.

Princípio #6 - Abraçar o ecosistema

Formado a partir da combinação de muitos pacotes de software livre (e open source), Meteor tenta se integrar perfeitamente com eles, no lugar de substituí-los por outros programas próprios. Ademais, dada sua filosofia e arquitetura, fica bastante simplificado a adoção de outros programas livres disponíveis sem (ou com um mínimo) modificações.  Por exemplo, você pode adotar bibliotecas do Node.js para a maioria das funções que o próprio Meteor não tem prontas.

Princípio #7 - Simplicidade se equipara a produtividade

A melhor maneira de se fazer algo parecer simples é fazendo que esse algo seja simples na realidade. Se atinge esse objetivo através de APIs claras e elegantes.  Na prática, sabemos que nada pode ser tão simples assim, o que não consiste numa razão para rejeitar esse princípio.


Introdução ao Meteor



Existem inúmeras bibliotecas javascript voltadas ao desenvolvimento de aplicações para o navegador.  Ficamos restritos ao uso do javascript, ou então a única alternativa possível é um plugin, instalado separadamente, que possa implementar a outra linguagem, de forma muito inconveniente. Essa idéia  levou à derrocada o Flash e seus derivativos, bem como produziu o fracasso dos applets java no navegador.
Por outro, precisamos de um servidor, que pode ter como linguagens de implementação o java, python, ruby (rails), ou inúmeras outras. Mas também podemos utilizar javascript do lado do servidor, para nossa vantagem, graças à existência de implementações como nodejs. Isso simplifica consideravelmente o desenvolvimento de uma aplicação completa, pois o mesmo programador pode escrever código para os dois lados da conversação na mesma linguagem, javascript.  É assentado sobre essa vantagem que surge o Meteor (meteoro em inglês), compartilhando em muitos casos exatamente o mesmo código dos dois lados, cliente e servidor e até mesmo no banco de dados.  Meteor trata o problema de criar aplicações web de forma completa, desde a definição de código no servidor e cliente, bem como na integração com o banco de dados, este último preferencialmente MongoDB (NoSql), além de fornecer as ferramentas de administração dos programas.

Meteor existe desde 2011, tendo criado a fama de ser a ferramenta ideal para a criação de protótipos de aplicações, mas atualmente está preparado para ser a solução completa de aplicações comerciais.  Ele transforma a aplicação em algo simples de ser compreendida, e permite que o desenvolvedor volte o foco para a funcionalidade da aplicação, no lugar de ficar se preocupando com sincronização de varáveis com a inteface gráfica ou servindo páginas para a aplicação. O core (núcleo) de Meteor é reativo, como veremos mais adiante, o que significa que atualizando as tabelas do banco de dados se reflete imediatamente e automaticamente nas variáveis e visões (views) da aplicação, mesmo que existam mútiplos clientes conectados ao mesmo tempo no servidor. Essa automação se deve em grande parte pela forma com que os módulos da aplicação se comunicam entre si, via um protocolo chamado DDP (Distributed Data Protocol) que governa a transferência de dados entre o servidor e os clientes.