• EvrenAy

Dagger 2 vs Koin - Dependency Injection İle Temel Anlatım

Güncelleme tarihi: 7 Haz 2021

Merhabalar, Koin ve Dagger serimize başlamadan önce bunların temelinde yatan dependency injection muhabbetine gelin bir göz atalım. Neyin nesidir kimin fesidir bu dependency injection ??

Daha iyi kavrayabilmek açısından örnekler üzerinden gideceğim.

İlk olarak şunu söylemeliyim ki eğer nesneye dayalı bir programlama dili öğreneceksek nesne kavramanı ve nesneler arasındaki ilişkiyi çok iyi bilmemiz gerekli. Bunun nedeni nesneye dayalı programlama dillerini geliştirmedeki genel yaklaşımın, geliştiricinin nesneleri ve nesneler arasındaki ilişkileri tanımlaması şeklinde olmasıdır. Genelde nesneleri yaşam döngüsü çerçevesinde sonlandırmak için gerekli yapılar kurulmuş.( Örn Garbage Collector ) Fakat nesnelerin;

· Oluşturulması

· Aralarındaki ilişkilerin kurulması

· Birbirleri arasındaki bağın koparılması (decoupling)

geliştiricinin yani bizim gerçekleştirmemiz gereken görevler arasında yer almakta.

İşte tam da bu noktada bağımlılıkların ve nesnelerin yönetiminde bize yardımcı olacak android için geliştirilen bazı kütüphaneler bulunmakta. Bu yazı serimde bunlardan en popüler olan iki tanesini anlatmaya ve karşılaştırmaya çalışacağım ama bunlara geçmeden hepsinin temelinde yatan şu decoupling olayını örneklerle bir ele alalım.

Şimdi başlıyoruz kemerleri bağlayın. Senaryomuz şu, bir bilgisayara ihtiyacımız var ve almak için araştırma yapıyoruz. Şimdi ne alaka bu konuyla diyeceksiniz ama birazdan bağlayacağım az sabır.




Teknoloji malum her daim gelişiyor ve diskler bir bilgisayar için performansı etkileyen en önemli etkenlerden biri. Olayımız şu ben bugün hdd olarak alacağım fakat yarın ssd ye çevirebilmem gerekli yeni bir teknoloji çıktığında onu da daha sonra bilgisayarıma entegre edebiliyor olmamam gerekli . Bu da bize bilgisayar nesnemin herhangi bir disk nesnesine bağımlı olmamasını sağlayacak. Örnek ile çok daha güzel anlaşılacağını düşünerek direk örneğe dalıyorum.


public class HDD {
private String marka;
private String model;
private String sonKalinanYer;
private Long boyut;
public byte[] oku() {
 // diskten okuma islemi
 return null;
}
public void yaz(byte[] bytes) {
 // diske yazma islemi
}
}

public class Bilgisayar {
private String marka;
private String model;
private HDD disk;
public Bilgisayar(String marka, String model)
{
 this.disk = new HDD();
}
}
Bilgisayar bilgisayar = new Bilgisayar(marka, model);

Bu yapıda bilgisayar ve hdd nesneleri arasında sıkı sıkıya bağlı bir ilişki var. Yani bu demek oluyor ki öyle bir bilgisayar yapmışlarki hdd den başka diskle çalışmıyor. SSD takıyorum bozuluyor. Siz ister misiniz böyle bir bilgisayar? Evet ben de istemem :)

Sıradaki yapımıza geçelim bağımlılığı şimdi bir nebze de olsa kaldırmayı deneyelim.


public class Bilgisayar {
private String marka;
private String model;
private HDD disk;

  public byte[] oku() {
 return disk.oku();
}

 public void yaz(byte[] bytes) {
 disk.yaz(bytes);
}
}

HDD disk = new HDD();
disk.setXXX();disk.setXXX();
disk.setXXX();