Kuidas kasutada JavaScripti vaikimisi parameetreid sõltuvuse süstimiseks

Nendel päevadel on üsna tavaline kasutada sõltuvuse süstimist, mis võimaldab projekti mooduleid omavahel lõdvalt siduda. Kuid projektide keerukuse kasvades on meil kontrollitavate sõltuvuste arv astronoomiline.

Selle probleemi lahendamiseks pöördume sageli sõltuvusse süstimise konteinerite poole. Kuid kas see on vajalik igas olukorras?

Selles postituses kirjeldan, kuidas JavaScripti vaikemälu parameetrid võivad meid selle küsimusega aidata. Selleks rakendame Node.JS-is lihtsa rakenduse. Sellel on kasutajate teabe loomise ja lugemise funktsioonid, kasutades kolme erinevat lähenemisviisi:

  1. Ilma sõltuvuse süstimiseta
  2. Sõltuvuse süstimisega
  3. Sõltuvuse süstimise ja vaikeparameetritega

Projekti ülesehitus

Struktureerime oma näidisprojekti funktsiooni järgi (muide - ärge struktureerige oma faile rollide ümber). Niisiis, struktuur saab olema midagi sellist:

├── kasutajad /
│ ├── kasutajad-repository.js
│ ├── kasutajad.js
│ ├── kasutajad.spec.js
│ ├── register.js
├── app.js

Märkus. Selle näite jaoks salvestame kasutajate teabe mällu.

Ilma sõltuvuse süstimiseta

Eelmist koodi analüüsides kontrollime, kas meid piirab lause: const usersRepo = nõuda ('./ kasutajad-hoidla') kasutajates. Selle moodi kasutaja moodul on tugevalt seotud kasutajate hoidlaga.

See piirab meid teise repositooriumi kasutamisega ilma nõudeavaldust muutmata. Kui nõuet kasutatakse, loome staatilise sõltuvuse vajalikust moodulist. Sellega ei saa me rakendusmudelis kasutada muud hoidlat peale selle, mille on määratlenud kasutajate hoidla moodul.

Lisaks sellele oleme varem mainitud staatilise sõltuvuse tõttu seotud ka kasutajate spetsifikatsioonis oleva kasutajate hoidlaga. Need ühiktestid on ette nähtud ainult kasutaja mooduli testimiseks ja ei midagi muud. Kujutage ette, kui hoidla oli ühendatud välise andmebaasiga. Testimiseks peaksime andmebaasiga suhtlema.

Sõltuvuse süstimisega

Sõltuvuse süstimisega ei ühendata enam kasutaja moodulit kasutajate hoidla mooduliga.

Peamine erinevus varasemast lähenemisest on see, et nüüd pole meil kasutajate moodulis staatilist sõltuvust (meil pole lauset: const usersRepo = nõuda ('./ kasutajad-hoidla')). Selle asemel eksportib kasutajate moodul tehase funktsiooni hoidla parameetriga. See võimaldab meil edastada mis tahes hoidla kõrgemal tasemel moodulile.

Tehasefunktsiooni alternatiiviks on hoidla argumendi parameetri lisamine funktsioonide loomise ja lugemise funktsioonidesse. Kuid kui need kaks funktsiooni sõltuvad ühest ja samast hoidlast, saame selle funktsiooni kapseldada ja kasutada ära JavaScripti sulgemise võimalused.

Nüüd on meil rakenduse moodulis vabadus määratleda, millist hoidlat me soovime kasutada. Vaadake ka ühikatseid. Nüüd saame kasutaja moodulit testida, hoidla pärast muretsemata. Lihtsalt pilkake seda!

Olgem ausad - kui sageli määratleme sõltuvusi, mis muutuvad kogu rakenduse elutsükli vältel? Tavaliselt püüame vältida staatilisi sõltuvusi, kuna see raskendab testimist. Kuid nüüd, kuna soovime testitavust, peame iga kord, kui me seda kasutada tahame, edastama hoidla eksemplari kasutaja moodulile.

Teate, mis oleks tõesti fantastiline? Kui me saaksime moodulit kasutada ilma, et peaksime talle iga kord repositooriumi andma. Saame seda teha JavaScriptis vaikeparameetritega.

Sõltuvuse süstimise ja vaikeparameetritega

Selle strateegia abil on lisaks eelmises lähenemisviisis nähtud sõltuvuse süstimisele kasutajate mooduli poolt eksporditud tehasefunktsioonis määratletud parameeter nüüd vaikeparameeter: usersRepo = defaultUsersRepo.

Kui me parameetrit ei edasta, kasutatakse vaikemäluparameetri korral funktsiooni vaikeparameetri väärtust. Vastasel korral kasutatakse argumendi väärtust. See on sama, kui kasutada eelmises lähenemisviisis määratletud sõltuvuse süstimise tehnikat.

Nüüd on meil kasutajate moodulis jälle staatiline sõltuvus. See staatiline sõltuvus on aga ainult selleks, et määratleda vaikeparameetris kasutatud väärtus, kui tehasfunktsioonile ei edastata ühtegi argumenti.

Sellise lähenemisviisi korral ei ole me kasutajate mooduli nõudmisel kohustatud hoidlat rakenduse moodulis üle andma. Sellegipoolest saame sellega hakkama. Samuti saame kontrollida, et ühikatsetustega saaks jätkuvalt modelleeritud hoidlat kasutada, kuna saame selle vaikimisi parameetri väärtuse asemel kasutada.

Järeldus

Vaikeparameetrid on lihtne JavaScripti funktsioon, kuid samas võimas. Nendega saame rakendada paremaid lahendusi.

Küsige julgelt minult midagi.

Rohkem ressursse

GitHubi hoidla koos näidetega: siin.

Mattias Petter Johanssonil on suurepärane sõltuvuse süstimise video:

Kui teile see artikkel meeldis, siis palun andke mulle mõned plaksutused, et rohkem inimesi seda näeks. Aitäh!