AdonisJS vs ExpressJS: Quando utilizar cada um?
Se você acompanha a Rocketseat sabe que estamos utilizando dois principais frameworks NodeJS, o ExpressJS, um micro-framework que resolve problemas isolados, muito enxuto e prático, e o AdonisJS, um framework mais robusto que segue padrões já validados anteriormente no Rails para Ruby ou Laravel para PHP.
Apesar de ensinarmos os dois, entendemos que cada um tem seu caso de uso e nesse post pretendo desmistificar qual o melhor cenário para utilizar cada uma dessas ferramentas.
ExpressJS
Como falado anteriormente, o ExpressJS resolve um leque isolado de problemas comuns em todas aplicações como gerenciamento de rotas, requisição e resposta e views.
A estrutura enxuta desse framework nos possibilita colocar uma aplicação no ar rapidamente com poucas linhas de código, mas toda e qualquer tipo de funcionalidade precisa praticamente ser feita na mão.
Vantagens
- Pouco código para iniciar;
- Comunidade imensa;
- Extremamente performático;
- Muitos plugins e bibliotecas;
- Você no controle da estrutura da aplicação;
- Integra com praticamente todo tipo de serviço;
- Você pode utilizar qualquer banco de dados;
Desvantagens
Apesar de todas essas vantagens acima, na minha visão o maior problema do ExpressJS é a liberdade para o programador estruturar a aplicação do jeito que preferir, seguindo alguns patterns ou não.
O segundo ponto mais problemático é que o ExpressJS não é feito para aplicações muito grandes. Se você utiliza um ORM como o Sequelize, Objection ou Bookshelf vai sentir que queries muito complexas no banco de dados acabam de tornando muito verbosas.
Além de que, ao iniciar uma aplicação com Express você precisa configurar tudo do zero, desde autenticação, ORM, validação, rotas, etc... Isso pode dar um tremendo trabalho desnecessário se não tiver um propósito por trás.
Quando escolher o ExpressJS?
A melhor utilização do ExpressJS é em aplicações arquitetadas em micro-serviços, isto é, dividir sua aplicação completa em serviços menores que são gerenciados por times menores de desenvolvimento em ambientes totalmente isolados que ao se conectarem formam a aplicação completa.
Os micro-serviços são a onda do momento e várias empresas gigantes estão seguindo por esse caminho, por exemplo, a Uber, Netflix, Medium, entre outras.
Outro bom caso de uso para o ExpressJS é em aplicações serverless. Não vou entrar em detalhes sobre esse tipo de aplicação mas veremos isso em outro post.
O ExpressJS também é muito bom para criação de aplicações como BOT's ou serviços menores com funcionalidades isoladas, por exemplo, hoje nossa estrutura de gamificação da Rocketseat é em ExpressJS.
AdonisJS
O Adonis é um framework mais robusto com uma série de funcionalidades prontas, extremamente baseado em frameworks famosos de outras linguagens como o Laravel, Rails ou Django.
Diferente do ExpressJS o Adonis assim que instalado já vem com uma estrutura pronta e o desenvolvedor é limitado a utilizar essa organização para seus arquivos, além de já possuir uma série de funcionalidades pré-implementadas como autenticação, ORM, validação, envio de e-mail, logging, etc...
Vantagens
- Funcionalidades pré-implementadas;
- Estrutura de arquivos;
- Opinado;
- ORM extremamente poderoso para trabalhar com SQL;
- Estrutura para lidar com websockets (real-time);
- CLI para facilitar scaffolding da aplicação;
Desvantanges
Assim como o Express, o AdonisJS tem suas desvantagens. A primeira dela é comunidade ainda muito nova, com poucos plugins e bibliotecas disponíveis (apesar de estar crescendo muito).
Outro ponto fraco do AdonisJS hoje é sua estrutura ser robusta demais para aplicações menores e também não oferecer um suporte muito legal para MongoDB no seu ORM.
Quando escolher o AdonisJS?
O AdonisJS se aplica muito bem para a grande maioria de aplicações comerciais que possuem um time menor que trabalha em todas as features do sistema, sem divisões.
Diferente dos micro-serviços, denominamos esse tipo de aplicação como monolítica, ou seja, todos serviços estão unidos em uma mesma base de código.
Por exemplo, hoje em nossa plataforma do aluno (o station) utilizamos AdonisJS, pois temos um time pequeno que trabalha em todas suas funcionalidades, utilizamos apenas SQL e podemos abusar de todas funcionalidades pré-configuradas do AdonisJS.
Concluindo
Yay, chegamos no fim de mais um post e está quase na hora de dizer adeus, mas antes vamos só recapitular rapidamente o que entendemos sobre essas duas ferramentas.
O ExpressJS é extremamente enxuto e muito simples e rápido para criamos aplicações simples, além disso, se encaixa muito bem com uma estrutura de micro-serviços já que buscamos simplicidade nesse tipo de arquitetura.
Por outro lado, o AdonisJS se destaca por sua série de funcionalidades pré-configuradas, seu ORM maravilindo e sua estrutura previamente definida que já foi validada por outros grandes frameworks como Laravel e Rails e, com isso, é altamente indicado para criação de aplicações monolíticas.