DEV Community

Mehmet
Mehmet

Posted on

DEPENDENCY INJECTİON VE DELEGASYON (DELEGATİON)

Dependency injection ve delegasyon ikisi de başka bir sınıf ile işlerini gerçekleştiriyorlar. Peki aralarında ki fark ne?

DEPENDENCY INJECTİON:
Sınıfımız için gerekli olan bir property'i (özellik, değişken, sınıf değişkeni, variable ne derseniz), constructor injection, setter injection, interface injection veya dagger (dagger hilt), koin gibi framework yöntemlerinden biriyle sınıfımıza dahil etmemize dependency injection diyoruz.

(Türkçe'ye "bağımlılık enjeksiyonu" olarak çevrilmiş ama "nesne enjeksiyonu yada zerki" gibi çevrilse daha anlaşılır olurmuş.)

Örnek: Araba üretiyoruz, arabanın içerisinde motor olması lazım. Ancak motoru biz araba fabrikamızda üretmiyoruz, dışarıdan alıp arabamıza monte ediyoruz.

Bu örneği kodlama lisanıyla anlatacak olursak;
Araba sınıfımız var, bu sınıf içerisinde bir motor sınıfı yazıp motor nesnesi oluşturmuyoruz. Dışarıda bir Motor sınıfı oluşturup bu oluşturduğumuz sınıftan motor nesnesini araba sınıfımıza yukarıda bahsettiğim yöntemlerden birisi ile property olarak dahil ediyoruz.

Burada dikkat edilecek hususlar;

  • Motor arabaya dışarıdan veriliyor (enjekte ediliyor).
  • Araba sınıfı motorun nasıl üretildiğini bilmek zorunda değil.

Örneğimizi koda dökersek;

// Kotlin ile yazıldı
// Motor sınıfı
class Motor {
    fun calistir() {
        println("Motor çalışıyor")
    }
}

// Araba sınıfı - Dependency Injection ile motor ekliyoruz
class Araba(val motor: Motor) {
    fun sur() {
        motor.calistir()
        println("Araba hareket ediyor")
    }
}

// Main fonksiyonu
fun main() {
    // Motor nesnesini dışarıda oluşturup arabaya monte ediyoruz
    val motor = Motor()
    val araba = Araba(motor)

// Araba sürme işlemi
araba.sur()
}

/*
Çıktı:
Motor çalışıyor
Araba hareket ediyor
*/
Enter fullscreen mode Exit fullscreen mode

DELEGASYON:
Sınıfımızda olması gereken bir işlevi (fonksiyonu) sınıfımız içinde tanımlamayıp onu başka bir sınıfa (başka sınıfın fonksiyonuna) yaptırıyoruz yani işimizi devrediyoruz.

Örnek: Kamyonetimiz ile bir yükü A noktasından B noktasına taşımamız gerekiyor. Bu işi biz yapmıyoruz, bir şoför tutup kamyoneti sürme işlevini şoföre yaptırıyoruz.

Bu örneği kodlama lisanıyla anlatacak olursak;
Kamyonet sınıfımız var ve bu sınıf içerisinde "tasima" fonksiyonu olması lazım, ama biz Kamyonet sınıfımız içerisinde tasima fonksiyonu tanımlamıyoruz. Var olan "Tasima" sınıfının "yukTasi" fonksiyonuna bu işi yaptırıyoruz.

Burada dikkat edilecek hususlar;

  • Kontrol hala bizde yük taşıma işi bizim işimiz,
  • Ama işi yapan başka biri, şoför.

Örneğimizi koda dökersek;

// Kotlin ile yazıldı
// Tasima sınıfı
class Tasima {
    fun yukTasi() {
        println("Yük taşınıyor")
    }
}

// Kamyonet sınıfı - Delegasyon kullanarak taşımayı başka sınıfa yaptırıyoruz
class Kamyonet(val tasima: Tasima) {
    fun yukTas() {
        // Taşıma işini tasima sınıfına devrediyoruz
        tasima.yukTasi()
    }
}

// Main fonksiyonu
fun main() {
    // Taşıma sınıfını oluşturup Kamyonet'e devrediyoruz
    val tasima = Tasima()
    val kamyonet = Kamyonet(tasima)
    // Yük taşıma işlemi
    kamyonet.yukTas()
}
/*
Çıktı:
Yük taşınıyor
*/
Enter fullscreen mode Exit fullscreen mode

Özetle;

  1. Dependency Injection da nesnelerin birbirine olan bağımlılıklarını
    yönetmek için dışarıdan bir nesne, property (sınıf değişkeni)
    olarak alınmakta;
    Delegasyon da ise bir işlev bir fonksiyon başka bir sınıfa
    yaptırılmakta.

  2. Dışarıdan başka bir sınıfın property'sine ihtiyaç var ise dependency
    injection
    ,
    dışarıdan başka bir sınıfın fonksiyonuna ihtiyaç var ise
    delegasyon diyoruz.

  3. Dependency Injection, bir sınıfın ihtiyaç duyduğu nesneleri
    dışarıdan alması;
    Delegasyon kendisine lazım olan ama kendinde olmayan bir işlevi
    (fonksiyonu) başka bir sınıfa yaptırmasıdır.

Sağlıcakla kalın…

Top comments (0)