0Pricing
Swift Academy · Ders

Bağımlılık Enjeksiyonu Neden Kullanılır

Sınanabilirlik için oluşturmayı kullanımdan ayırın.

Bağımlılık Enjeksiyonu Neden Kullanılır, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 1. 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, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Bağımlılık Enjeksiyonu Neden Kullanılır

Bağımlılık enjeksiyonu (DI), bir nesnenin ihtiyaç duyduğu şeyleri kendisinin oluşturması yerine dışarıdan almasıdır. Bu yaklaşım bileşenlerin birbirine bağımlılığını azaltır ve onları sınamayı kolaylaştırır.

Sorun: Sıkı Bağlılık

Bir tür kendi işbirlikçi nesnelerini oluşturduğunda, somut sınıflara bağlı kalır ve yeniden yapılandırılamaz veya yalıtılmış olarak sınanamaz.

class Logger {
    func log(_ m: String) { print("LOG: \(m)") }
}
class Service {
    let logger = Logger() // hard-coded dependency
    func run() { logger.log("running") }
}
Service().run()

Bağlılık Sınamayı Zorlaştırır

Service her zaman gerçek bir Logger oluşturduğu için bir sınama, günlük kaydı çıktısını yakalayamaz veya taklit edemez. Bağımlılık dışarıdan görünmez.

class Logger { func log(_ m: String) { print(m) } }
class Service {
    let logger = Logger()
    func run() { logger.log("hello") }
}
// No way to swap Logger here.
Service().run()

Fikir: Bağımlılığı Enjekte Etme

Bunun yerine bağımlılığı dışarıdan geçiriniz. Çağıran taraf hangi uygulamanın sağlanacağına karar verir; böylece Service artık bununla ilgilenmez.

class Logger { func log(_ m: String) { print("LOG: \(m)") } }
class Service {
    let logger: Logger
    init(logger: Logger) { self.logger = logger }
    func run() { logger.log("running") }
}
Service(logger: Logger()).run()

Bağları Ayırmanın Faydaları

Enjeksiyon sayesinde aynı Service, kodunu değiştirmeden üretimde veya sınamalarda farklı günlük kaydı bileşenleriyle çalışabilir.

class Logger { var lines: [String] = []
    func log(_ m: String) { lines.append(m) } }
class Service {
    let logger: Logger
    init(logger: Logger) { self.logger = logger }
    func run() { logger.log("event") }
}
let l = Logger()
Service(logger: l).run()
print(l.lines)

Tek Sorumluluk

DI, tek sorumluluk ilkesini destekler: bir tür kendi görevine odaklanır ve diğer sorumlulukları enjekte edilen işbirlikçilere devreder.

struct Mailer { func send(_ to: String) { print("Mail to \(to)") } }
struct SignupFlow {
    let mailer: Mailer
    func register(_ email: String) { mailer.send(email) }
}
SignupFlow(mailer: Mailer()).register("a@b.com")

Esneklik

Nesneleri yeni şekillerde yeniden birleştirebilirsiniz. Bağlantıların kurulması uygulamanızın sınırlarında gerçekleşir ve çekirdeğin esnek kalmasını sağlar.

struct Engine { let power: Int }
struct Car {
    let engine: Engine
    func describe() { print("Power: \(engine.power)") }
}
Car(engine: Engine(power: 200)).describe()
Car(engine: Engine(power: 90)).describe()

Açık Bağımlılıklar

Bağımlılıkları listeleyen bir başlatıcı, türün tam olarak neye ihtiyaç duyduğunu belgeler. Gizli ve kendi kendine oluşturulan bağımlılıklar bu sözleşmeyi gizler.

struct Repo { func load() -> [Int] { [1, 2, 3] } }
struct Report {
    let repo: Repo // visible dependency
    func total() -> Int { repo.load().reduce(0, +) }
}
print(Report(repo: Repo()).total())

Oluşturmak Yerine Birleştirme

DI, nesnelerin dışarıdan birleştirilmesini tercih eder. Küçük bir birleştirme kökü grafiği oluşturur; kodun geri kalanı yalnızca ihtiyaç duyduğu şeyleri alır.

struct DB { func count() -> Int { 42 } }
struct Stats { let db: DB; func show() { print(db.count()) } }
// Composition root:
let app = Stats(db: DB())
app.show()

Yalnızca Büyük Uygulamalar İçin Değil

Küçük programlar bile bundan yararlanır: bir bağımlılığı enjekte etmek, ek çerçeveler olmadan davranışın değiştirilebilmesini ve niyetlerin açık olmasını sağlar.

struct Clock { func now() -> Int { 12 } }
struct Greeter {
    let clock: Clock
    func greet() { print(clock.now() < 12 ? "Morning" : "Afternoon") }
}
Greeter(clock: Clock()).greet()

Çerçeve Gerekmez

Swift'te DI için kütüphane gerekmez. Düz başlatıcılar ve protokoller yeterlidir. Gelecek derslerde kurucu enjeksiyonunu, protokolleri ve taklit nesnelerini göreceksiniz.

struct Adder { func add(_ a: Int, _ b: Int) -> Int { a + b } }
struct Calc {
    let adder: Adder
    func run() { print(adder.add(2, 3)) }
}
Calc(adder: Adder()).run()

Hızlı Denetim

Bağımlılık enjeksiyonunun temel fikri nedir?

Özet

Bağımlılık enjeksiyonu, işbirlikçi nesneleri içeride oluşturmak yerine dışarıdan sağlar; böylece bağlılığı azaltır, bağımlılıkları açık hâle getirir ve sınamayı mümkün kılar. Swift'te bunun için bir çerçeve gerekmez. Sırada en yaygın biçimi göreceksiniz: kurucu enjeksiyonu.

Sıkça Sorulan Sorular

“Bağımlılık Enjeksiyonu Neden Kullanılır” dersi ücretsiz mi?

Evet — “Bağımlılık Enjeksiyonu Neden Kullanılır” 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 Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Bağımlılık Enjeksiyonu Neden Kullanılır” dersinde ne öğreneceğim?

Sınanabilirlik için oluşturmayı kullanımdan ayırın. Swift 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.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift 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 1. dersidir.

“Bağımlılık Enjeksiyonu Neden Kullanılır” 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 Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift 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

  1. Bağımlılık Enjeksiyonu Neden Kullanılır
  2. Kurucu Enjeksiyonu
  3. Protokol Tabanlı Soyutlamalar
  4. Sınamalarda Bağımlılıkları Taklit Etme
← Swift Academy Sayfasına Dön