Ideia - JavaScript Isomórfico Universal

Muito já se falou de JavaScript Isomórfico e das suas vantagens, porém ainda sempre me perguntam:

Suissa qual framework eu devo estudar agora: Angular ou React?

E eu facilmente respondo:

Todos.

Aí a pessoa indaga:

Mas assim eu não vou ser especialista em nenhum!

E eu respondo:

QUE ÓTIMO! Ninguém deveria ser especialista de framework, frameworks são todos iguais: entregam uma arquitetura pronta, por mais "livre" que seja.

Nisso eu lhe questiono:

Como fazer algo que seja isomórfico e UNIVERSAL? Que o mesmo código sirva para qualquer framework?

Então essa é a minha ideia de JavaScript Isomórfico Universal, que você possa escrever 1 módulo e que o mesmo possa ser utilizado tanto no Angular, como no React, como no Ember, etc.

Logicamente você deve me perguntar:

Mas como isso Suissa?

Antes de lhe explicar isso vou dar-te um exemplo simples:

Imagine 1 input de CPF que sempre precise validar seu valor no evento onBlur, correto?

Então imagine comigo que você tem 1 módulo que é a função de validação do CPF em JavaScript puro (vanilla), certo?

Agora imagine que você tem um JSON para configurar esse componente e nele você atrela a chamada da função do blur do componente à execução dessa validação e que a mesma EMITA 1 evento ou de sucesso ou de erro.

Apenas isso, tudo bem?

Nesse momento podemos imaginar como poderia ser esse JSON:

{
  name: atom-input-cpf,
  events: [
    blur: require('./validations/cpf')
  ]
}

Agora imagine que podemos ter 1 parser para transformar esse JSON em 1 diretiva/componente para qualquer framework, tendo em vista que a forma de trabalhar com os elementos e com eventos é diferente para cada framework.

Por isso que eu ensino Atomic Design tanto no Frontend como no Backend, pois a meta final do Be MEAN é criarmos uma arquitetura modular que possa utilizar qualquer framework que você desejar e principalmente:

Caso você queira migrar de um framework para o outro bastará executar o gerador específico em cima de cada módulo/componente criado.

Com isso você poderia migrar facilmente de Angular para React+Flux ou React+Redux, pois para cada espeficidade só dependerá da comunidade criar o gerador.

E acredito que com isso pode dar uma padronizada no código inicial com as boas práticas de cada framework.

Mas essa ideia não seria apenas para o frontend, a ideia é que o mesmo seja feito no backend e que futuramente a gente possa escolher REALMENTE o melhor framework para cada projeto, tendo em vista que o desenvolvedor só precisaria se focar nas regras de negócio e sendo essas também reusadas no JSON de configuração.

E como eu já demonstrei nesse artigo de mais de 2 anos, já temos TODO um padrão para o CRUD de qualquer entidade podendo ser gerado a partir do frontend e não apenas do banco de dados.

Posso dizer que essa ideia já esta sendo colocada em prática podendo ser vista na forma como ensinei Node.js atomicamente para que possamos reaproveitar TODAS AS FUNÇÔES DE VALIDAÇÕES tanto no backend como no frontend.

Ou seja, um dia teremos virtualmente qualquer função de validação necessária para qualquer tipo de sistema, com isso teremos um tempo de início de projeto ridicularmente menor.

E como o conceito atômico lembra muito a programação funcional, as regras de negócio/validação serão criadas a partir da composição dessas funções atômicas e isomórficas.

Então o conceito de JavaScript Isomórfico Universal leva o JavaScript Isomórfico para um novo patamar.

E diferentemente do que as pessoas devem achar que nós definiremos 1 arquitetura específica para que isso possa acontecer, nós na verdade só precisamos criar o JSON de configuração que será o mesmo para todos, agora a forma interna de como eles serão gerados e utilizados ficará a cargo do desenvolvedor.

Logo os desenvolvedores podem criar seus próprios parsers utilizando suas arquiteturas específicas para isso, parecido com os geradores do Yeoman, a diferença é que ele já geraria os módulos com a arquitetura que você escolheu no parser.

Se você acredita que é apenas mais uma viagem minha ou quer dar alguma sugestão por favor comente abaixo.

ps: o resultado vocês verão ao final desse ano. ;)

Comentários

comments powered by Disqus