Riippuvuuksien injektointi konstruktorilla
Injektoikaa riippuvuudet siististi konstruktoreiden kautta.
Riippuvuuksien injektointi konstruktorilla on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Konstruktorin injektointi perusteellisesti
Konstruktorin injektoinnissa jokainen riippuvuus ilmoitetaan konstruktorin parametrina. Olio on täysin kytketty heti luomishetkellä, joten pakollisia yhteistyökomponentteja ei voi unohtaa.
Parametriominaisuudet
TypeScript voi ilmoittaa ja määrittää riippuvuuden yhdellä kertaa käyttämällä parametrissa näkyvyysmääritettä. private readonly luo kentän ja määrittää sen automaattisesti.
interface Mailer { send(to: string, body: string): void; }
class Notifier {
constructor(private readonly mailer: Mailer) {}
}Rajapintoihin perustuvat riippuvuudet
Rajapintaan eikä luokkaan perustuva riippuvuus irrottaa käyttäjän tietystä toteutuksesta. Käyttöön voidaan toimittaa mikä tahansa olio, joka vastaa rajapintaa.
interface Mailer { send(to: string, body: string): void; }
class SmtpMailer implements Mailer {
send(to: string, body: string) { console.log("SMTP ->", to); }
}Kytkentä koostamisjuuressa
Oliograafin luovaa paikkaa kutsutaan koostamisjuureksi. Siellä valitaan konkreettiset toteutukset ja injektoidaan ne.
class Notifier {
constructor(private readonly mailer: Mailer) {}
notify(to: string) { this.mailer.send(to, "hello"); }
}
const app = new Notifier(new SmtpMailer());
app.notify("a@b.com");Toteutusten vaihtaminen
Koska riippuvuuden tyyppinä on rajapinta, täysin erilainen toteutus voidaan toimittaa koskematta Notifier-luokkaan. Tämä on DI:n tarjoaman joustavuuden ydin.
class FakeMailer implements Mailer {
sent: string[] = [];
send(to: string) { this.sent.push(to); }
}
const fake = new FakeMailer();
new Notifier(fake).notify("x@y.com");
console.log(fake.sent); // ["x@y.com"]Testaus ilman oikeaa I/O:ta
Testi voi testikorvikkeena käytettävän postittajan avulla tarkistaa, mitä olisi lähetetty, ilman oikeaa sähköpostia. Testi on nopea, deterministinen ja eristetty.
const fake = new FakeMailer();
new Notifier(fake).notify("test@site");
console.log(fake.sent.length === 1); // trueUseita riippuvuuksia
Ilmoittakaa niin monta riippuvuutta kuin tarvitaan. Jokainen niistä on eksplisiittinen, tyypitetty ja pakollinen, joten luokan tarpeet näkyvät yhdellä silmäyksellä.
interface Logger { log(m: string): void; }
class Notifier {
constructor(
private readonly mailer: Mailer,
private readonly logger: Logger,
) {}
}readonly estää uudelleenmäärittämisen
Injektoitujen kenttien merkitseminen readonly-määritteellä estää niiden vaihtamisen olion elinkaaren aikana ja pitää olion yhteistyökomponentit vakaina ja ennakoitavina.
class Notifier {
constructor(private readonly mailer: Mailer) {}
// this.mailer = ... would be a compile error
}Ei piilotettua new-kutsua
Konstruktorin injektointia käyttävän luokan ei pitäisi luoda yhteistyökomponenttejaan sisäisesti new-operaattorilla. Kaikki riippuvuudet saapuvat konstruktorin kautta, joten kytkentä pysyy näkyvänä.
Pakolliset ja valinnaiset
Pakolliset riippuvuudet kuuluvat konstruktoriin. Aidosti valinnaisille riippuvuuksille voidaan käyttää oletuksena tyhjää toteutusta, joka välitetään edelleen sisään sen sijaan, että se luotaisiin luokan sisällä.
const noopLogger: Logger = { log() {} };
new Notifier(new SmtpMailer(), noopLogger);Hyötyjen yhteenveto
Konstruktorin injektointi tekee riippuvuudet näkyviksi, alustaa oliot täysin, mahdollistaa toteutusten vaihtamisen ja tekee testaamisesta helppoa. Se on DI:n oletustyyli hyvästä syystä.
Pikatarkistus
Tämän oppitunnin pikatarkistus.
Kertaus
Konstruktorin injektointi ilmoittaa riippuvuudet rajapinnan avulla tyypitettyinä parametreina, usein muodossa private readonly. Koostamisjuuri valitsee toteutukset ja testit välittävät testikorvikkeita. Oliot ovat aina täysin kytkettyjä, ja yhteistyökomponentit voidaan vaihtaa luokkaa muokkaamatta.
Opi TypeScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 101
- Oppitunnit
- 352
Usein kysytyt kysymykset
Onko oppitunti ”Riippuvuuksien injektointi konstruktorilla” ilmainen?
Kyllä – oppitunnin ”Riippuvuuksien injektointi konstruktorilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Riippuvuuksien injektointi konstruktorilla”?
Injektoikaa riippuvuudet siististi konstruktoreiden kautta. Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Riippuvuuksien injektointi konstruktorilla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?
Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Kontrollin kääntämisen perusteet
- Riippuvuuksien injektointi konstruktorilla
- DI-kontit InversifyJS:llä
- Tyyppiturvalliset palvelutunnisteet