Press ESC to close

Dependency Injection

Merhaba arkadaşlar, bu yazımızda Dependency Injection nedir bundan bahsedeceğiz. Solid prensiblerinin son prensibi olan Dependency Inversion‘dan gelir. Bu prensip, oluşturduğumuz sınıflar arasındaki bağlılığın olabildiğinde az olmasını önemser. Üst sınıf ve alt sınıflar birbirinden bağımsız olmalıdırlar. Bu yüzden günümüz teknolojilerinde Dependency Injection çok önemli bir noktaya gelmiştir.

Bu yazımızda Swift ile geliştirdiğimiz projelerde nasıl kullanırız bundan bahsedeceğiz. Yapacağımız örnekte bir köpek sınıfı oluşturup, bu oluşturduğumuz köpek sınıfını hayvan sınıfında kullanacağız. Kodumuz aşağıdaki gibidir. Şu anda hayvan sınıfı aslında köpek sınıfına bağlıdır. Biz ileride bu hayvan sınıfına bir kedi, aslan, fil vs hayvan eklemeye kalktığımız zaman hepsi için ayrı sınıf oluşturmamız gerekecek ve bu hayvan sınıfı aslında oluşturduğumuz her bir ayrı hayvan sınıfına bağlı olacak. Buralarda bişey değiştiği zaman yönetilmesi epey güç olacaktır. Her bir sınıf için ayrı bir efor gerekecektir.

class Animal {
    var dog: Dog?
    
    init(dog: Dog) {
        self.dog = dog
    }
    
    func play() {
        dog?.run()
        dog?.stop()
        dog?.eat()
    }
}

class Dog {
    
    func run() -> String {
        return "run"
    }
    
    func eat() -> String {
        return "eat"
    }
    
    func stop() -> String {
        return "stop"
    }
}

Bunun yerine IAnimal isminde bir protokol oluşturup bu protokol sayesinde oluşturucağımız tüm hayvanların yönetilmesini sağlayabiliriz. Bu sayede her bir hayvan için ayrı ayrı yönetmektense bu şekilde daha rahatça yönetebiliyoruz.

protocol IAnimal {
    func run() -> String
    func eat() -> String
    func stop() -> String
}


class Animal {
    var dog: IAnimal?
    
    init(dog: Dog) {
        self.dog = dog
    }
    
    func play() {
        dog?.run()
        dog?.stop()
        dog?.eat()
    }
}

class Dog: IAnimal {
    
    func run() -> String {
        <#code#>
    }
    
    func eat() -> String {
        <#code#>
    }
    
    func stop() -> String {
        <#code#>
    }
}

class Cat: IAnimal {
    func run() -> String {
        <#code#>
    }
    
    func eat() -> String {
        <#code#>
    }
    
    func stop() -> String {
        <#code#>
    }
}

Sorularınız olursa mail veya yorum atarak ulaşabilirsiniz. İyi çalışmalar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir