0Pricing
TypeScript Academy · Pelajaran

Dasar-Dasar Inversi Kontrol

Pahami alasan dan waktu yang tepat untuk membalik dependensi.

Dasar-Dasar Inversi Kontrol adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Dependensi yang Dikodekan Tetap

Ketika sebuah kelas membuat sendiri komponen pendukungnya dengan new, kelas tersebut terikat erat pada tipe konkret itu. Akibatnya, kelas sulit dikonfigurasi ulang dan sulit diuji.

Contoh dengan Keterikatan Erat

Di sini, layanan membuat logger-nya sendiri. Tidak ada cara untuk mengganti logger dengan yang berbeda tanpa mengedit kelas tersebut.

class ConsoleLogger { log(m: string) { console.log(m); } }
class OrderService {
  private logger = new ConsoleLogger(); // hard-coded
  place() { this.logger.log("order placed"); }
}
new OrderService().place();

Apa Itu Inversi Kendali?

Inversi Kendali (IoC) membalik pihak yang menentukan dependensi. Alih-alih membuatnya sendiri, kelas menerima dependensi dari luar. Kelas menyatakan kebutuhannya dan menerimanya.

Injeksi Dependensi

Injeksi Dependensi (DI) adalah cara umum untuk mencapai IoC: teruskan komponen pendukung dari luar, alih-alih membuatnya secara internal. Pemanggil mengendalikan implementasi yang digunakan.

Versi dengan Injeksi

Sekarang logger disediakan dari luar. Layanan tersebut tidak lagi mengetahui atau memedulikan logger konkret mana yang diterimanya.

class OrderService {
  constructor(private logger: { log(m: string): void }) {}
  place() { this.logger.log("order placed"); }
}
new OrderService(new ConsoleLogger()).place();

Mengapa IoC Meningkatkan Kemudahan Pengujian

Karena dependensi berasal dari luar, pengujian dapat meneruskan objek tiruan atau mata-mata. Anda dapat memverifikasi perilaku tanpa I/O nyata, basis data, atau calls jaringan.

const calls: string[] = [];
const fakeLogger = { log: (m: string) => calls.push(m) };
new OrderService(fakeLogger).place();
console.log(calls); // ["order placed"]

Bergantung pada Abstraksi

IoC bekerja paling baik ketika kelas bergantung pada sebuah antarmuka, bukan kelas konkret. Implementasi apa pun yang memenuhi antarmuka tersebut dapat disuntikkan.

interface Logger { log(m: string): void; }
class OrderService {
  constructor(private logger: Logger) {}
}

Injeksi Konstruktor

Injeksi konstruktor meneruskan dependensi sebagai parameter konstruktor. Dependensi tersebut langsung tersedia dan dapat ditandai sebagai readonly, sehingga kebutuhan kelas menjadi jelas dan wajib dipenuhi.

class OrderService {
  constructor(private readonly logger: Logger) {}
}

Injeksi Properti

Injeksi properti menetapkan dependensi pada properti publik atau properti yang dapat diatur setelah konstruksi. Cara ini lebih fleksibel, tetapi memungkinkan objek berada sementara tanpa dependensi tersebut.

class OrderService {
  logger!: Logger; // set after construction
  place() { this.logger.log("placed"); }
}
const s = new OrderService();
s.logger = new ConsoleLogger();

Memilih Gaya

Utamakan injeksi konstruktor untuk dependensi yang wajib ada, karena objek tidak pernah berada dalam keadaan setengah terbentuk. Gunakan injeksi properti untuk komponen pendukung opsional atau untuk memutus siklus konstruksi.

Pratinjau Kontainer IoC

Untuk app besar, menghubungkan dependensi secara manual menjadi melelahkan. Kontainer IoC mengotomatiskan pembuatan dan penyediaan dependensi, yang akan dibahas pada pelajaran berikutnya menggunakan InversifyJS.

Pemeriksaan Singkat

Pemeriksaan singkat tentang pelajaran ini.

Ringkasan

Inversi Kendali memindahkan pembuatan dependensi ke luar kelas; injeksi dependensi memasukkannya ke dalam kelas. Bergantunglah pada antarmuka, utamakan injeksi konstruktor untuk dependensi wajib, dan dapatkan pengujian yang mudah dengan menyuntikkan objek tiruan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dasar-Dasar Inversi Kontrol” gratis?

Ya — teks lengkap “Dasar-Dasar Inversi Kontrol” 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 “Dasar-Dasar Inversi Kontrol”?

Pahami alasan dan waktu yang tepat untuk membalik dependensi. 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 1 dari 4.

Berapa lama pelajaran “Dasar-Dasar Inversi Kontrol” 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