Sunrabbit

Framework szintű DI Node.js junioroknak is

  • Írás nyelve: Koreai
  • Országkód: Minden országcountry-flag
  • Informatika

Létrehozva: 2024-11-08

Létrehozva: 2024-11-08 14:02

Node.js-sel szerverfejlesztés során számos alkalommal megkísérthet a Spring használata.

Szerkezettségének, rendszerszerűségének és a nehézkes „kiszabadulásnak” köszönhetően.


Ezért jelent meg a Node.js környezetben a Nest.js keretrendszer.

Sokan kívánták a Springhez hasonlóan strukturált módon fejleszteni a szervert.


A Spring DI futásidejű reflexiót használ a DI nyelvi szintű végrehajtásához.

A Dotnet is hasonlóképpen attribútumokon alapuló követést használ a reflexióval történő DI végrehajtásához.


Hogyan valósítja meg a Nest.js a DI-t?

A Spring és a Dotnet alapjául szolgáló nyelvek fordító nyelvek, ezért a nyelvi szinten támogatják a reflexiót,

de az ecma script csupán... egy értelmező nyelvű egyszerű halandó?


Az alábbiakban a Nest.js oktatóanyagában található példák egyike látható.


Ez a TypeScript-ben írt kód a fordítás után nyilvánvalóan már nem tartalmazza a típuscímkéket, és a konstruktor nem ismeri a szükséges argumentum típusát.


A megoldás a nyelvi specifikációban rejlett.

Reflect

Szerencsére létezett egy olyan nyelvi szintű funkció, amely lehetővé teszi metaadatok hozzáadását az objektumokhoz.

Framework szintű DI Node.js junioroknak is


Ez egy egyszerű funkció, amely metaadatokat ad hozzá és olvas ki az objektumokból.


A TypeScript tehát ezt gondolta:

Mi lenne, ha a fordítás során a típusinformációkat metaadatokként tárolnánk?


A TypeScript tehát minden osztálydekorátor esetén a szükséges argumentumok típusát tárolja a Reflect-ben.

Framework szintű DI Node.js junioroknak is

Ehhez nem szükséges semmilyen transzformáció vagy fekete mágia, pusztán a TypeScript fordító funkciója.


Ha az osztály metaadataiban szerepelnek a konstruktor szükséges argumentumainak típusai,

akkor az osztály betöltésekor ismerjük a típusokat, és megfelelően beállíthatjuk őket.


A megvalósítás megtekinthető a NestJS-ben is, de ez túl terjedelmes, ezért egy másik könyvtárat ajánlok.


A Microsoft által készített könyvtár kódja meglehetősen tiszta.

Ajánlom, hogy nézze meg, és ezzel befejezem a cikket.

Hozzászólások0