Sunrabbit

Framework DI na poziomie frameworka — nawet dla juniora Node.js

  • Język oryginalny: Koreański
  • Kraj: Wszystkie krajecountry-flag
  • TO

Utworzono: 2024-11-08

Utworzono: 2024-11-08 14:02

Podczas rozwoju serwera za pomocą Node.js, często kuszą nas liczne zalety Springa.

Dzieje się tak ze względu na jego strukturę, systematyczność i trudność w omijaniu jego mechanizmów.


Dlatego w środowisku Node.js powstał framework Nest.js.

To wynik licznych chęci tworzenia serwerów w strukturze zorganizowanej, podobnej do Springa.


Jednak DI w Springu wykorzystuje refleksję w czasie działania, aby umożliwić DI na poziomie języka.

Podobnie jest w Dotnet, gdzie DI jest realizowane za pomocą refleksji, w oparciu o atrybuty.


A jak Nest.js realizuje DI?

Spring i Dotnet opierają się na językach kompilowanych, które wspierają refleksję na poziomie języka,

ale ecma script to tylko... zwykły język interpretowany?


Poniżej znajduje się jeden z przykładów z tutoriala Nest.js.


Po skompilowaniu kod TypeScript, pozbawiony jest tagów typu, a konstruktor klasy nie będzie wiedział, jakiego typu są argumenty.


Rozwiązanie tkwi w specyfikacji języka.

Reflect

Na szczęście, istnieje funkcja pozwalająca dodawać metadane do obiektów na poziomie języka.

Framework DI na poziomie frameworka — nawet dla juniora Node.js


Jest to prosta funkcja dodawania i pobierania metadanych z obiektów.


Dlatego TypeScript pomyślał:

A co, gdyby podczas kompilacji klasy, informacje o typach były dodawane do metadanych?


Dlatego TypeScript, w miejscach, gdzie używane są dekoratory klas, przechowuje w Reflect informacje o typach argumentów potrzebnych do konstruktora.

Framework DI na poziomie frameworka — nawet dla juniora Node.js

Nie ma tu żadnych transformacji ani czarów, tylko funkcjonalność kompilatora TypeScript.


Jeśli w metadanych klasy znajdują się typy argumentów konstruktora,

to możemy je pobrać i użyć.


Implementację można znaleźć w NestJS, ale jest ona dość rozbudowana, dlatego polecam inną bibliotekę.


Biblioteka ta, stworzona przez Microsoft, charakteryzuje się czystym kodem.

Polecam ją do zapoznania się i na tym zakończę ten wpis.

Komentarze0