0Pricing
TypeScript Academy · Pelajaran

Injeksi Konstruktor

Suntikkan dependensi melalui konstruktor dengan rapi.

Injeksi Konstruktor adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.

Injeksi Konstruktor secara Mendalam

Injeksi konstruktor menyatakan setiap dependensi sebagai parameter konstruktor. Objek sepenuhnya terhubung saat dibuat, sehingga komponen pendukung yang wajib ada tidak mungkin terlupakan.

Properti Parameter

TypeScript dapat menyatakan dan menetapkan dependensi dalam satu langkah menggunakan pengubah akses pada parameter. private readonly membuat dan menetapkan bidang tersebut secara otomatis.

interface Mailer { send(to: string, body: string): void; }
class Notifier {
  constructor(private readonly mailer: Mailer) {}
}

Dependensi Berbasis Antarmuka

Bergantung pada antarmuka, bukan kelas, memisahkan konsumen dari implementasi tertentu. Objek apa pun yang cocok dengan antarmuka tersebut dapat diberikan.

interface Mailer { send(to: string, body: string): void; }
class SmtpMailer implements Mailer {
  send(to: string, body: string) { console.log("SMTP ->", to); }
}

Menghubungkan di Akar Komposisi

Komponen yang membuat graf objek disebut akar komposisi. Di sanalah Anda memilih implementasi konkret dan menyuntikkannya.

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");

Mengganti Implementasi

Karena dependensinya berupa antarmuka, Anda dapat memberikan implementasi yang sama sekali berbeda tanpa menyentuh Notifier. Inilah fleksibilitas utama yang disediakan DI.

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"]

Menguji Tanpa I/O Nyata

Menyuntikkan fake ke pengirim surel memungkinkan sebuah test memeriksa apa yang seharusnya dikirim, tanpa mengirim surel sungguhan. Test tersebut cepat, deterministik, dan terisolasi.

const fake = new FakeMailer();
new Notifier(fake).notify("test@site");
console.log(fake.sent.length === 1); // true

Beberapa Dependensi

Cantumkan sebanyak mungkin dependensi yang diperlukan. Masing-masing bersifat eksplisit, memiliki tipe, dan wajib dipenuhi, sehingga kebutuhan kelas terlihat jelas sekilas.

interface Logger { log(m: string): void; }
class Notifier {
  constructor(
    private readonly mailer: Mailer,
    private readonly logger: Logger,
  ) {}
}

readonly Mencegah Penetapan Ulang

Menandai bidang yang disuntikkan sebagai readonly mencegahnya diganti di tengah masa hidup objek, sehingga komponen pendukung objek tetap stabil dan dapat diprediksi.

class Notifier {
  constructor(private readonly mailer: Mailer) {}
  // this.mailer = ... would be a compile error
}

Tidak Ada Pembuatan Tersembunyi di Dalam

Kelas yang menggunakan injeksi konstruktor seharusnya tidak membuat komponen pendukungnya secara internal dengan new. Semua dependensi masuk melalui konstruktor, sehingga keterikatan tetap eksplisit.

Wajib dibandingkan Opsional

Dependensi wajib harus ditempatkan di konstruktor. Dependensi yang benar-benar opsional dapat menggunakan implementasi tanpa operasi sebagai nilai bawaan, tetapi tetap diteruskan dari luar, bukan dibuat di dalam.

const noopLogger: Logger = { log() {} };
new Notifier(new SmtpMailer(), noopLogger);

Ringkasan Manfaat

Injeksi konstruktor membuat dependensi eksplisit, objek sepenuhnya diinisialisasi, implementasi mudah diganti, dan pengujian menjadi sederhana. Ada alasan kuat mengapa ini menjadi gaya DI bawaan.

Pemeriksaan Singkat

Pemeriksaan singkat tentang pelajaran ini.

Ringkasan

Injeksi konstruktor menyatakan dependensi sebagai parameter yang biasanya bertipe antarmuka dan menggunakan private readonly. Akar komposisi memilih implementasi; pengujian meneruskan objek tiruan. Objek selalu sepenuhnya terhubung, dan komponen pendukung dapat diganti tanpa mengedit kelas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Injeksi Konstruktor” gratis?

Ya — teks lengkap “Injeksi Konstruktor” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Injeksi Konstruktor”?

Suntikkan dependensi melalui konstruktor dengan rapi. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Injeksi Konstruktor” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Inversi Kontrol
  2. Injeksi Konstruktor
  3. Kontainer DI dengan InversifyJS
  4. Token Layanan yang Aman Secara Jenis
← Kembali ke TypeScript Academy