Sunrabbit

DI em nível de framework, mesmo para juniores Node.js

  • Idioma de escrita: Coreana
  • País de referência: Todos os paísescountry-flag
  • TI

Criado: 2024-11-08

Criado: 2024-11-08 14:02

Ao desenvolver servidores com Node.js, muitas vezes somos tentados pelas inúmeras vantagens do Spring.

Devido à sua estrutura organizada, sistemática e à dificuldade de se desviar de sua arquitetura.


Por isso, no ecossistema Node.js, surgiu o framework Nest.js.

Muitos programadores desejavam, pelo menos, desenvolver servidores em uma estrutura organizada, semelhante ao Spring.


No entanto, a injeção de dependências (DI) do Spring utiliza reflexão em tempo de execução para permitir a injeção de dependências em nível de linguagem.

O Dotnet também faz o mesmo, rastreando com base em atributos e usando reflexão para realizar a injeção de dependências.


Então, como o Nest.js consegue realizar a injeção de dependências?

O Spring e o Dotnet são baseados em linguagens compiladas, que oferecem suporte à reflexão em nível de linguagem, mas...

o EcmaScript é apenas uma linguagem interpretada comum, não é?


Abaixo está um exemplo do tutorial do Nest.js.


Certamente, este código TypeScript, após a compilação, terá suas tags de tipo removidas, e não saberá os tipos de argumento necessários para o construtor da classe.


A solução estava na especificação da linguagem.

Reflect

Felizmente, havia um recurso em nível de linguagem que permitia adicionar metadados a cada objeto.

DI em nível de framework, mesmo para juniores Node.js


É uma função simples que apenas adiciona e recupera metadados de objetos.


Então, o TypeScript pensou:

E se adicionarmos as informações de tipo aos metadados ao compilar as classes?


Portanto, o TypeScript, sempre que um decorador de classe é usado, armazena as informações sobre os argumentos necessários para o construtor da classe no Reflect.

DI em nível de framework, mesmo para juniores Node.js

Isso não envolve nenhuma transformação ou magia negra; é apenas um recurso do compilador TypeScript.


Dessa forma, com as informações de tipo dos argumentos necessários para o construtor incluídas nos metadados da classe,

podemos recuperá-las e usá-las.


Você pode verificar a implementação no NestJS, mas como é bastante extensa, recomendo outra biblioteca.


Como esta biblioteca é da Microsoft, o código é bastante limpo.

Recomendo que você dê uma olhada. Com isso, concluo este artigo.

Comentários0