NestJS: Porquê o escolhemos como o framework da Loft

Ramon Pereira
Loft
Published in
3 min readSep 13, 2019
Photo by Erik-Jan Leusink on Unsplash

A Loft é uma empresa que utiliza bastante tecnologia para reinventar o antiquado mercado imobiliário. Para que consigamos continuar a reinventá-lo, precisamos escolher as melhores ferramentas disponíveis no mercado e dentre elas estão as ferramentas que compõem a stack de tecnologia que utilizamos.

Uma das melhores decisões que tomamos em relação a nossa stack foi unificar o framework em que nosso Backend roda e selecionar o NestJS como a língua franca dos nossos servidores de API. Aqui vão os pontos que nos convenceram de que o NestJS era uma escolha inteligente.

Organização de código e Typescript

O NestJS te fornece uma organização de código padrão bastante simples e fácil de entender: um model-service-controller em que os models cuidam da camada de dados — as entidades e a comunicação com o banco de dados — , os controllers cuidam de toda a parte da requisição e resposta do servidor e os serviços possuem lógica do negócio.

Aliado a esse pattern de organização de código, o framework também permite o uso do Typescript, que facilita enormemente o desenvolvimento devido a sua tipagem opcional. Ajuda na hora de entender os campos e as funções nas classes que você utiliza, além de possuir alguns recursos de linguagem que simplificam bastante o desenvolvimento. Além disso, facilita também a transição de desenvolvedores de linguagens fortemente tipadas, como C# e Java, para o Typescript — rapidamente esses excelentes desenvolvedores puderam se adaptar à nossa stack, sem muitas dificuldades.

Modularidade e Injeção de dependências

O framework te possibilita utilizar módulos para separar as responsabilidades do seu código e não ser vítima de um mega monolito. Apesar de ser possível escrever um código super monolítico no NestJS, a migração para um contexto mais modular é possível e pode ser suave, sem necessariamente você sofrer bastante para realizar a transição.

Além disso, o NestJS possui um poderoso sistema de injeção de dependências que facilita bastante a integração dos módulos com suas dependências, como controllers e services, de modo que você consiga ter um código limpo, testável e organizado. Resume-se praticamente a adicionar um decorator à classe, adicionar uma entrada no módulo correspondente e voilà: você possui uma dependência funcionando sem dor de cabeça.

ORMs maduros e suporte a SQL e MongoDB

Para bancos de dados relacionais, o NestJS permite o uso do TypeORM, que suporta diversos tipos de bancos de dados, como PostgreSQL e MySQL. Os schemas são definidos como classes no Typescript e é possível adicionar diversos tipos de salvaguardas e verificações antes de se inserir o modelo no banco. Fica extremamente fácil e prazeroso de se escrever modelos no código e salvá-los no banco de dados, dado que o Nest lida com toda a complicação nos bastidores.

Além de permitir utilizar bancos relacionais, o NestJS permite utilizar o MongoDB, lançando mão do Mongoose como ORM, de modo que seja possível ter um schema previsível e sob controle, sem abrir mão de se utilizar o MongoDB.

Tanto o Mongoose quanto o TypeORM são bastante maduros, quando comparados com outros ORMs do ecossistema. Isso se mostra um ponto positivo, especialmente quando se lida com aquela feature que você precisava e que ainda não foi implementada no seu ORM favorito. Mesmo longe de serem perfeitos, são escolhas excelentes que o framework tomou ao adicioná-los ao seu corpus.

Similaridade com outros frameworks consagrados

E o principal ponto, na minha visão, é que o framework se assimila bastante a outros frameworks consagradíssimos de outras linguagens, como C# e Java. A sintaxe é extremamente familiar e o NestJS possui bastante inspiração nesses frameworks, o que permite que a curva de aprendizado seja minimizada e o tempo necessário para que as pessoas possam contribuir significativamente seja o menor possível.

O NestJS tem se mostrado como uma excelente escolha até o momento. Os pontos os quais citei acima são apenas alguns dos recursos que ele possui — é possível integrar o código com o Cron, criar Publishers e Subscribers em filas, criar Interceptors, Middlewares, dentre outros recursos.

E caso você tenha se interessado pela cultura de Engenharia da Loft e quer revolucionar o mercado imobiliário com a gente, veja nossas vagas!

--

--