Yapıcı Enjeksiyonu
Bağımlılıkları yapıcılar aracılığıyla temiz biçimde enjekte edin.
Yapıcı Enjeksiyonu, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
Kurucu Enjeksiyonunu Ayrıntılı İnceleme
Kurucu enjeksiyonu, her bağımlılığı bir kurucu parametresi olarak bildirir. Nesne var olduğu anda tümüyle bağlanmış olur; bu da zorunlu yardımcı bileşenlerin unutulmasını imkânsız hâle getirir.
Parametre Özellikleri
TypeScript, parametre üzerinde bir erişim belirleyicisi kullanarak bir bağımlılığı tek adımda bildirip atayabilir. private readonly, alanı otomatik olarak oluşturur ve atar.
interface Mailer { send(to: string, body: string): void; }
class Notifier {
constructor(private readonly mailer: Mailer) {}
}Arayüz Tabanlı Bağımlılıklar
Sınıf yerine bir arayüze bağlanmak, tüketiciyi belirli herhangi bir gerçeklemeden ayırır. Arayüzle eşleşen her nesne sağlanabilir.
interface Mailer { send(to: string, body: string): void; }
class SmtpMailer implements Mailer {
send(to: string, body: string) { console.log("SMTP ->", to); }
}Bileşim Kökünde Bağlama
Nesne grafiğini oluşturan yer, bileşim köküdür. Burada somut gerçeklemeleri seçip bunları enjekte edersiniz.
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");Gerçeklemeleri Değiştirme
Bağımlılık bir arayüz olduğu için Notifier sınıfına dokunmadan tamamen farklı bir gerçekleme sağlayabilirsiniz. DI'nin sağladığı temel esneklik budur.
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"]Gerçek G/Ç Olmadan Sınama
Sahte posta göndericisini enjekte etmek, gerçek e-posta göndermeden gönderilecek içeriği bir sınamada doğrulamanızı sağlar. Sınama hızlı, belirlenebilir ve yalıtılmıştır.
const fake = new FakeMailer();
new Notifier(fake).notify("test@site");
console.log(fake.sent.length === 1); // trueBirden Çok Bağımlılık
Gerektiği kadar bağımlılık listeleyin. Her biri açık, türü belirtilmiş ve zorunludur; bu da sınıfın gereksinimlerini bir bakışta görünür tutar.
interface Logger { log(m: string): void; }
class Notifier {
constructor(
private readonly mailer: Mailer,
private readonly logger: Logger,
) {}
}readonly Yeniden Atamayı Önler
Enjekte edilen alanları readonly olarak işaretlemek, kullanım ömrü boyunca bunların değiştirilmesini önler ve nesnenin yardımcı bileşenlerini kararlı ve öngörülebilir tutar.
class Notifier {
constructor(private readonly mailer: Mailer) {}
// this.mailer = ... would be a compile error
}İçeride Gizli new Yok
Kurucu enjeksiyonu kullanan bir sınıf, yardımcı bileşenlerini içeride new ile oluşturmamalıdır. Tüm bağımlılıklar kurucu üzerinden gelir; böylece bağlantılar açık kalır.
Zorunlu ve İsteğe Bağlı
Zorunlu bağımlılıklar kurucuda yer almalıdır. Gerçekten isteğe bağlı olanlar, yine içeride oluşturulmak yerine dışarıdan aktarılan işlem yapmayan bir gerçeklemeyi varsayılan olarak kullanabilir.
const noopLogger: Logger = { log() {} };
new Notifier(new SmtpMailer(), noopLogger);Faydaların Özeti
Kurucu enjeksiyonu bağımlılıkları açık hâle getirir, nesneleri tümüyle başlatır, gerçeklemelerin değiştirilebilmesini sağlar ve sınamaları kolaylaştırır. İyi bir nedenle varsayılan DI stilidir.
Kısa Kontrol
Bu ders için kısa bir kontrol.
Özet
Kurucu enjeksiyonu, arayüzle tiplendirilen bağımlılıkları parametre olarak bildirir; çoğu zaman private readonly kullanılır. Bileşim kökü gerçeklemeleri seçer, sınamalar ise sahte nesneler aktarır. Nesneler her zaman tümüyle bağlanmış olur ve yardımcı bileşenler sınıfı düzenlemeden değiştirilebilir.
Sıkça Sorulan Sorular
“Yapıcı Enjeksiyonu” dersi ücretsiz mi?
Evet — “Yapıcı Enjeksiyonu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Yapıcı Enjeksiyonu” dersinde ne öğreneceğim?
Bağımlılıkları yapıcılar aracılığıyla temiz biçimde enjekte edin. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Yapıcı Enjeksiyonu” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Denetimin Tersine Çevrilmesinin Temelleri
- Yapıcı Enjeksiyonu
- InversifyJS ile DI Kapsayıcıları
- Tür Güvenli Hizmet Belirteçleri