Nest JS: 4 motivos que me fizeram escolher este framework para o desenvolvimento de aplicações backend Node Js
Tags: nestjs, node, backend, frameworks
Published: 2023-05-16 23:49:57

## Introdução
Bom, estou escrevendo este post pois quero compartilhar um pouquinho sobre um framework que descobri esse ano. Estou trabalhando com ele a pouco tempo, mas desde do começo, já me chamou muita atenção. Gostaria de dizer para você quais foram os 4 principais motivos que me fizeram escolher este framework. Senhoras e Senhores, este é o Nest JS.

## Mas antes, o que é esse Nest JS?
Nest JS é um framework de desenvolvimento **back-end** em Node.js que utiliza conceitos e técnicas de programação orientada a objetos e programação funcional para criar aplicações escaláveis e modularizadas. Ele usa TypeScript como linguagem principal e possui uma arquitetura modular, com uma estrutura de pastas organizada que facilita a criação e manutenção de projetos complexos.

## Já ouvi falar de um tal de Next.js, é a mesma coisa?
**Next** e o **Nest** são coisas totalmente diferentes. **Next.js** é um framework de desenvolvimento web em JavaScript, utilizado para criar aplicações front-end com React. **Nest JS** é um framework de desenvolvimento **back-end** em Node.js. O foco desse artigo é falar sobre o **Nest JS** (o que tem o 's' 😅).

## Inspiração do Nest JS
O Nest JS é inspirado em alguns dos conceitos e estruturas do Angular, como a injeção de dependência, os decoradores e os módulos. O criador do Nest JS, **Kamil Myśliwiec**, também contribuiu para o desenvolvimento do Angular.

No entanto, o Nest JS é voltado para o desenvolvimento de aplicações back-end em Node.js, enquanto o Angular é voltado para o desenvolvimento de aplicações front-end em JavaScript.

Vamos finalmente para os motivos que me fizeram escolher o Nest JS, para implementar aplicações backend com Node JS.

## Motivo 1: Framework opinado

Um **framework opinado** é um framework que faz fortes suposições sobre qual as melhores práticas para desenvolvimento de software e arquitetura da sua aplicação.

Seguir essas opiniões e convenções devem acelerar o tempo de desenvolvimento, já que agora, precisamos nos preocupar apenas com o desenvolvimento das regras de negócio. Isso também é conhecido como ["Convention Over Configuration"](https://facilethings.com/blog/en/convention-over-configuration).

Sem dúvida, essa característica foi essencial para mim, ao escolher o Nest JS. Imagina que você já teve contato com os conceitos de autorização e autenticação, mas nunca implementou um login do zero. A documentação do Nest JS, já te apresenta quais as boas práticas ao desenvolver esse tipo de funcionalidade. Não é ótimo?

## Motivo 2: Inversão de Controle/Injeção de dependência
Por um período, utilizei uma biblioteca chamada Inversify. Ela permite inserir o conceito de Injeção de dependências/Inversão de controle dentro de uma aplicação Node. Demorei um bom tempo para entendê-la. O grande problema é que você precisava preencher alguns arquivos, sempre que criava uma nova classe que deveria ser injetada. Você fazia isso configurando dois arquivos dentro da aplicação (quantas vezes esqueci de adicionar as novas classes, e a aplicação não rodava kkk).

Descobri que o Nest JS, já tinha por padrão o conceito de Injeção de dependências/Inversão de controle. Você só precisava fazer uma importação da classe em questão dentro da campo `providers `e adicionar uma anotação `@Injectable()`. Pronto! Você já era capaz de injetar uma classe dentro de um construtor.

Sem dúvida, saber que o Nest já utilizava os conceitos de Inversão de Controle/Injeção de Dependência, me chamou atenção positivamente. 

## Motivo 3: Ótima documentação
Pode ser apenas uma impressão minha, mas achei bem agradável e amigável essa documentação, principalmente para quem está começando com este framework. Não foi difícil entender as soluções apresentadas em cada seção. Basicamente, boa parte do que precisei implementar, consegui fazer utilizando apenas as informações da documentação do Nest JS. 

Ela conta com um repositório no github, que tem a implementação da maior parte dos conceitos explicados. Você tem acesso a implementação ao fim de cada capítulo (figura abaixo). 

![Documentação do Nest JS](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2fhfnymle9c92ww63txc.png)

Se quiser acessar o repositório com todas as implementações, [clique aqui](https://github.com/nestjs/nest).

## Motivo 4: Variedade de técnicas e receitas disponíveis

Outro ponto a se destacar é que o Nest JS disponibiliza na sua documentação, uma série de técnicas e receitas. Você consegue implementar "todo" tipo de aplicação que imaginar.

**Técnicas:**
- Configuração de envs, banco de dados, mongo, validação, caching, serialização, versionamento de API, agendamento de tasks, filas, logging, cookies, eventos, session, Graphql, Websockets, etc.

**Arquiteturas:**
- Microservices, MVCs, Monorepos, etc.

**Receitas:**
- Passport, Swagger, Health checks, CQRS, Prisma, Serve static, Automock, CRUD generator.

Descobri uma série de bibliotecas e conceitos que eram desconhecidos para mim, e que aumentaram o meu leque de opções como desenvolvedor (por exemplo, conceito de monorepo).

## Conclusão
Este artigo apresentou o Nest JS, um framework back-end escalável e modularizado em Node.js, que utiliza programação orientada a objetos e funcional. Destacou-se sua opinião, facilidade de injeção de dependência, ótima documentação e variedade de técnicas disponíveis.
Em resumo, o Nest JS pode ser uma excelente escolha para desenvolvedores que buscam um framework robusto e produtivo para seus projetos.

## Referências
- [Documentação oficial](https://docs.nestjs.com/)