Skip to content

icanerdogan/HILT-TurkceRehber

Repository files navigation

HILT Türkçe Öğretici Rehber

Dependency Injection

Dependency injection, bir sınıfın/nesnenin bağımlılıklardan kurtulmasını amaçlayan ve o nesneyi olabildiğince bağımsızlaştıran bir programlama tekniği/prensibidir. Dependency Injection, bağımlılıkları soyutlamak demektir.

Bağımlılık oluşturacak parçaların ayrılıp, bunların dışardan verilmesiyle sistem içerisindeki bağımlılığı minimize etme işlemidir. Yazılımı oluşturan yapılar kaçınılmaz olarak birbirleri ile ilişkilidir. Bu ilişkinin bir bağa ve sınırlandırmaya sebep olmaması için mümkün mertebe ilişkiyi gevşek tutmak önemlidir. Biz buna Loosely Coupled yani Gevşek Bağlılık diyoruz. Bundan dolayı yazılımı oluşturan yapıların birbirleri ile olan sıkı bağ azalacağı için uygulamaya yeni özellikler eklenip çıkartılabilmesi kolay hale gelecektir.

Dependency Injection kodun yeniden kullanılabilirliği, yeniden düzenleme kolaylığı ve test kolaylığı olmak üzere 3 farklı avantaj sağlamaktadır.

  • Sınıfların yeniden kullanılabilirliği ve bağımlılıkların ayrıştırılması: Bir bağımlılığın uygulamalarını değiştirmek daha kolaydır. Kontrolün tersine çevrilmesi nedeniyle kodun yeniden kullanımı geliştirildi ve sınıflar artık bağımlılıklarının nasıl oluşturulduğunu kontrol etmiyor, bunun yerine herhangi bir konfigürasyonla çalışıyor.
  • Yeniden düzenleme kolaylığı: Bağımlılıklar API yüzeyinin doğrulanabilir bir parçası haline gelir, böylece uygulama ayrıntıları olarak gizlenmek yerine nesne oluşturma veya derleme zamanında kontrol edilebilirler.
  • Test kolaylığı: Bir sınıf bağımlılıklarını yönetmez, bu nedenle onu test ederken, tüm farklı durumlarınızı test etmek için farklı uygulamalardan geçebilirsiniz.
Dependency Injection Örnek Uygulaması

Dependency Injection Basit Uygulama

Sınıflar genellikle diğer sınıflara referanslar gerektirir. Örnek olarak "Car" sınıfı "Engine" sınıfına ihtiyacı yani bağımlılığı vardır.

Aşağıdaki kullanım bir Dependency Injection değildir!

class Car { 
    private val engine = Engine() 
    fun start() { 
        engine.start() 
    } 
} 
fun main(args: Array) { 
    val car = Car() 
    car.start() 
}

Aşağıdaki kullanım bir Constructor Injection örneğidir!

Bu kullanımda görüldüğü üzere Engine sınıfı başka sınıflar içinde kullanılabilir hale gelmiştir. Eğer Car sınıfı ElectricEngine kullanmak istediğinde, Engine olarak oluşturulan bu sınıfı eklemek olacaktır.

class Car(private val engine: Engine) { 
    fun start() { 
        engine.start() 
    } 
} 
fun main(args: Array) { 
    val engine = Engine() 
    val car = Car(engine) 
    car.start() 
}

Aşağıdaki kullanım bir Field Injection (or Setter Injection) örneğidir!

Activity ve Fragment gibi sınıflar sistem tarafından başlatılabilir bu nedenle yapıcı Constructor Injection kullanılması mümkün değildir. Field Injection ile sınıf oluşturulduktan sonra bağımlılıklar somutlaştırılır.

class Car { 
    lateinit var engine: Engine 
    fun start() { 
        engine.start() 
    } 
} 
fun main(args: Array) { 
    val car = Car() 
    car.engine = Engine() 
    car.start() 
}

Dagger üzerine kurulan HILT sayesinde örnekleri verilen Dependency Injection daha hızlı şekilde yapılabilmektedir.

HILT

Coming Sooooooon!

Releases

No releases published

Packages

No packages published

Languages