Uma visão sobre frameworks fullstack

Publicado em 2016-02-14 por Vinicius Assef

Algumas pessoas não gostam de frameworks fullstack. Outras não imaginam o mundo sem eles. Quando usar um framework fullstack e quando optar por outra alternativa?

Antes de começar

Leia Qual é a diferença entre framework fullstack e microframework? antes de ler esse artigo, para entender o contexto.

Introdução

Algumas pessoas não gostam de frameworks fullstack. Já outras têm a opinião de que eles são a melhor escolha, sempre. O fato é que os frameworks fullstack têm muitas vantagens. Prova disso é que Django, um fullstack, é o framework web para Python mais popular do mercado e usado por grandes empresas em todo o mundo.

Tudo de bom

A primeira vantagem clara, e talvez a mais importante, é que você começa a produzir código rapidamente porque:

  • Não precisa escolher componentes externos para compor seu projeto;
  • Eles já vêm configurados e integrados.

Essa integração é tão grande que às vezes nem percebemos que várias partes estão interagindo para entregar um resultado. Um exemplo disso é o SQLFORM.grid() do Web2py. Temos ali códigos de backend interagindo com outros códigos de frontend de maneira transparente para o programador. É o que muitos chamam de "mágica". A propósito, com o SQLFORM.grid() é possível fazer um CRUD completo para uma tabela com apenas 1 linha de código.

Outro exemplo é o Django Admin. Quem conhece sabe as mágicas que ele faz! Quando entramos mais a fundo, vemos que, na verdade, o Django Admin não é apenas um componente; são vários. Mas a documentação faz menção a ele como "uma coisa só". Uma linha para registrar seu Model e voilà!

Algumas vantagens menos óbvias dos frameworks fullstack, que não podem ser desprezadas, são:

  • A documentação está em um único lugar e abrange toda a stack;
  • O código das aplicações tende a ser mais padronizado porque eles incentivam um "estilo recomendado";
  • Quando surgem dificuldades, você tem um lugar certo para buscar soluções;
  • É mais fácil encontrar pessoas que conheçam o framework como um todo, pois normalmente você vai usar os componentes do framework.

Essas características, em algumas situações, permitem que projetos sejam viabilizados ou finalizados com sucesso.

Certamente são pontos positivos muito importantes.

Problemas no paraíso

Como nada é perfeito, alguns pontos importantes podem impactar seus projetos:

  • Em geral, os frameworks fullstack têm alto grau de acoplamento entre os componentes, justamente porque eles foram projetados para funcionarem juntos;
  • Pelo motivo acima, fica difícil mudar alguns componentes. E se mudar, acaba perdendo algumas funcionalidades projetadas para funcionar com o conjunto completo, como vimos no exemplo do artigo Qual é a diferença entre framework fullstack e microframework?;
  • Você aprende a programar "no framework", deixando um pouco de lado a enorme diversidade do ecossistema Python;
  • Existe o risco de haver muitas adequações quando vierem novas releases do framework, já que vários componentes podem ter novidades ao mesmo tempo.

Dessas características acima, quero destacar as duas últimas.

Se você trabalha com Django há algum tempo, percebeu que "já desenvolveram de tudo pra resolver todo tipo de problema" . Agora imagine esse sentimento extrapolado para o ecossistema Python como um todo! Os frameworks fullstack, em maior ou em menor grau, sofrem da síndrome de Not Invented Here porque precisam fazer "suas coisas" funcionarem com suas próprias escolhas ou porque peferem não ter muitas dependências externas.

Um exemplo dessa síndrome é o Scheduler do Web2py. Ele permite executar tarefas periódicas sem recorrer aos cronjobs. Já existem ótimas soluções consolidadas para isso. Umas mais complexas, outras mais simples. Apesar disso, o Web2py tem um componente próprio. Ele é simples de usar, mas não precisaria ser desenvolvido.

Um dos motivos que me fizeram escolher Python como linguagem principal é que Python é usado para quase tudo! Desde administração de servidores até sequenciamento de genoma, passando por web e animação gráfica. Fique atento se você está usando um framework que tem uma solução própria para um problema que deveria ser genérico ou que já existe uma boa solução pronta. E, se você usar um framework que tenha isso, procure sempre usar a alternativa já consolidada. Desacople-se do framework o máximo que puder.

Outro problema é sobre adequação de código em novas releases. Como os frameworks fullstack trazem todos os componentes, existe a possibilidade de vários deles serem atualizados quando o framework lançar uma nova release. Com isso, há o risco de você precisar adequar vários pontos dos seus sistemas. Isso pode ser um problema para equipes responsáveis por vários projetos, adiando a migração para a versão mais nova. Com isso, o tempo passa, as tarefas nunca acabam e os projetos vão ficando com versões antigas do framework.

Conclusão

Podemos dizer que um framework fullstack seria uma boa escolha se você:

  1. Procura algo pronto para começar a usar;
  2. Está ciente das desvantagens e tem estratégias para lidar com elas;
  3. Desenvolve projetos que usem todos, ou a maior parte, dos componentes oferecidos pelo framework;
  4. Não irá precisar de algo muito diferente do que o framework já oferece.

Para saber mais, leia:

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.