Nisa Efendioğlu

Kotlin Assisted Injection

Profile picture

Nisa Efendioğlu

Post Image

Android Kotlin'de Assisted Injection: Temel Bilgiler ve Kullanımı

Android uygulama geliştirmede, bağımlılık enjeksiyonu (Dependency Injection, DI) önemli bir rol oynar. DI, bir sınıfın ihtiyaç duyduğu bağımlılıkları dışarıdan sağlamaya olanak tanır ve bu da kodun daha modüler, test edilebilir ve sürdürülebilir olmasını sağlar. Ancak bazı durumlarda, belirli bağımlılıkların manuel olarak sağlanması gerekebilir. İşte burada Assisted Injection devreye girer. Bu makalede, DI ve Assisted Injection'ın ne olduğunu, nasıl kullanıldığını ve neden önemli olduğunu detaylı bir şekilde açıklayacağız.

Bağımlılık Enjeksiyonu Nedir?

Bağımlılık enjeksiyonu, bir sınıfın ihtiyaç duyduğu bağımlılıkların (örneğin, bir veri tabanı bağlantısı veya bir ağ istemcisi) dışarıdan sağlanmasıdır. Bu, sınıfın kendi bağımlılıklarını oluşturmak zorunda kalmadan, onları kullanabilmesini sağlar. Bu, kodun daha modüler, test edilebilir ve sürdürülebilir olmasını sağlar.

Örneğin, bir Car sınıfımız ve bu sınıfın bir Engine bağımlılığı olduğunu düşünelim:

image

Burada:

  • Engine sınıfı, bir arabanın motorunu temsil eder. start metoduyla motorun çalıştırılmasını simüle eder.
  • Car sınıfı, bir araba nesnesini temsil eder ve Engine nesnesine bağımlıdır. drive metodu, motoru çalıştırır ve arabayı sürmeye başlar.

Car sınıfı, Engine nesnesine ihtiyaç duyar çünkü bir araba motor olmadan çalışamaz. Motor, arabanın sürülmesini sağlayan temel bileşendir.

Assisted Injection Nedir?

Assisted Injection, DI kullanarak bazı bağımlılıkların otomatik olarak sağlanırken, bazılarını manuel olarak sağlama yöntemidir. Bu, özellikle bağımlılıkların bazılarının çalışma zamanı (runtime) parametrelerine bağlı olduğu durumlarda kullanışlıdır. Örneğin, bir kullanıcı adı veya bir konfigürasyon parametresi gibi çalışma zamanı değerleri.

Assisted Injection Kullanımı

Adım 1: Gerekli Bağımlılıkları Tanımlama

Öncelikle, bağımlılıkları tanımlamalıyız. Örneğin, bir Car sınıfımız olduğunu ve bu sınıfın bir Engine ve bir Driver bağımlılığı olduğunu düşünelim. Ancak, Driver nesnesi çalışma zamanında sağlanmalıdır.

image

Bu kodda:

  • Engine sınıfı bir bağımlılıktır ve DI tarafından otomatik olarak sağlanır.
  • Driver sınıfı bir çalışma zamanı bağımlılığıdır, yani nesnesi oluşturulurken bazı parametreler (örneğin, name) sağlanmalıdır.
  • Car sınıfı hem DI tarafından otomatik olarak sağlanan Engine bağımlılığına sahiptir hem de manuel olarak sağlanması gereken Driver bağımlılığına sahiptir.

Adım 2: Assisted Factory Oluşturma

Assisted Injection kullanmak için bir fabrika (factory) oluşturmalıyız. Bu fabrika, çalışma zamanı bağımlılıklarını sağlayacaktır.

image

Bu kodda:

  • CarFactory adında bir arayüz (interface) oluşturduk.
  • Bu arayüz, create adında bir fonksiyon içerir ve bu fonksiyon, Driver nesnesini parametre olarak alır ve bir Car nesnesi oluşturur.

Adım 3: Bağımlılıkları Sağlama

Son olarak, bağımlılıkları sağlamak için fabrika sınıfını kullanmalıyız.

image

Bu kodda:

  • MainActivity sınıfında, CarFactory nesnesini DI tarafından enjekte ettik.
  • onCreate metodunda, Driver nesnesini oluşturduk ve gerekli parametreleri sağladık (örneğin, name).
  • CarFactory aracılığıyla, Car nesnesini oluşturduk ve Driver nesnesini manuel olarak sağladık.
  • Car nesnesi ile yolculuğu başlattık (startJourney metodunu çağırdık).

Neden Assisted Injection Kullanmalıyız?

  1. Esneklik: Çalışma zamanı parametrelerine bağlı bağımlılıkların sağlanmasına olanak tanır. Örneğin, kullanıcı tarafından girilen veriler veya uygulamanın durumuna bağlı olarak farklı bağımlılıkların sağlanması gerekebilir.
  2. Test Edilebilirlik: Bağımlılıkların manuel olarak sağlanabilmesi, test sırasında kolaylık sağlar. Test sırasında belirli bağımlılıkların nasıl sağlanacağını kontrol edebiliriz.
  3. Modülerlik: Uygulamanın farklı bölümlerinin birbirinden bağımsız olarak geliştirilmesini ve test edilmesini sağlar. Bu, kodun daha modüler olmasına katkıda bulunur.

Assisted Injection Kullanılmadığında Ne Olur?

Assisted Injection kullanılmadığında, tüm bağımlılıkların DI sistemi tarafından sağlanması gerekecektir. Bu, bazı bağımlılıkların çalışma zamanı parametrelerine bağlı olduğu durumlarda sorunlara yol açabilir. Örneğin:

image

Bu durumda, Driver nesnesi DI sistemi tarafından sağlanmalıdır, ancak Driver nesnesinin bazı çalışma zamanı parametrelerine (örneğin, ismine) ihtiyaç duyduğunu varsayalım. Bu parametreler çalışma zamanı sırasında sağlanamaz ve bu, DI sisteminin esnekliğini ve kullanılabilirliğini azaltır.

Bağımlılık Enjeksiyonunun Önemi

  1. Kodun Modülerliği: DI, kodun daha modüler olmasını sağlar. Sınıflar, ihtiyaç duydukları bağımlılıkları oluşturmak zorunda kalmadan, dışarıdan alırlar. Bu, sınıfların birbirinden bağımsız olarak geliştirilebilmesini sağlar.
  2. Test Edilebilirlik: DI, sınıfların daha kolay test edilebilmesini sağlar. Mock bağımlılıkları kullanarak sınıfları izole edebilir ve bağımlılıkların nasıl sağlandığını kontrol edebiliriz.
  3. Sürdürülebilirlik: DI, kodun daha sürdürülebilir olmasını sağlar. Bağımlılıkların merkezi bir yerde yönetilmesi, kodun daha kolay bakımını sağlar ve değişikliklerin daha kolay yapılabilmesine olanak tanır.

Özet

Assisted Injection, bağımlılık enjeksiyonu kullanılan durumlarda belirli bağımlılıkların manuel olarak sağlanmasını sağlar. Bu, özellikle bağımlılıkların bazılarının çalışma zamanı parametrelerine bağlı olduğu durumlarda kullanışlıdır. Assisted Injection kullanılmadığında, tüm bağımlılıkların DI sistemi tarafından sağlanması gerekeceğinden esneklik kaybolabilir ve çalışma zamanı parametrelerine bağlı bağımlılıkların sağlanması zorlaşabilir.

Bu makalede, Android Kotlin'de Assisted Injection'ın temellerini ve nasıl kullanılacağını öğrendik. Umarım bu bilgiler, Android projelerinde daha esnek ve yönetilebilir bağımlılık enjeksiyonu yapmanıza yardımcı olur.

Mutlu kodlamalar!

Go back