• EvrenAy

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

En son güncellendiği tarih: 19 Eyl 2019

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.




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.




HDD disk = new HDD();
disk.setXXX();disk.setXXX();
disk.setXXX();
Bilgisayar bilgisayar = new Bilgisayar(marka, model, disk);

Şuan da bağlılığı bir nebzede olsa kaldırabildik. Az önce hdd nesnesi tam anlamıyla bilgisiyar nesnesine bağlıydı. Bilgisayar nesnesi öldürüldüğünde hdd de ölmek durumunda kalıyordu. Şuan da o durumu aşmış vaziyetteyiz ama hala istediğimiz konuma ulaşmadı. Ben hala hdd yerine ssd takamıyorum çünkü bilgisayarım sadece hdd destekliyor.



SSD disk = new SSD();
disk.setXXX();
disk.setXXX();
disk.setXXX();
Bilgisayar bilgisayar = new Bilgisayar(marka, model, disk);
!!! beklenen parametre hdd türünde !!!

Peki ne yapacağız da tamamen dinamik ve birbirine bağlı olmayan nesneler oluşturacağız. Çözüm interface kullanmak.




Bilgisayar ssdBilgisayar = new Bilgisayar(marka, model, new SSD());
ssdBilgisayar.oku();
Bilgisayar hddBilgisayar = new Bilgisayar(marka, model, new HDD());
hddBilgisayar.oku();

Disk adlı oluşturduğumuz interfacede disk adı alan nesnelerin hepsinde bulunan ortak nitelikleri tanımlayıp bu disklerin özel adlarıyla oluşturduğumuz classlarda bu disk interface’ ini implement ettik.(hdd ssd gibi…) Bu bize ne sağladı: Kontrol kolaylığı ve kod okunurluğu. Ayrıca bilgisayar class'ımızın içinde herhangi bir özel adlı disk class'ımız yerine interface'imizi referans verdik. Dolayısıyla bu interface'i implement eden bütün classlar kontrol altımıza girdi. İşte tam da aradığımız dinamik yapı! Artık bilgisayarıma istediğim zaman ssd istediğim zaman hdd ya da başka diskler takabilir ve çalıştırabilir hale geldim.( Çalıştırabilmekten kasıt metotlarına erişebilir haldeyim.)


Kısaca dependecy injection mantığını anlatmaya çalıştım. Bundan sonra gelecek olan koin ve dagger kütüphanelerini anlayabilmek için bu alt yapıyı sağlam kurmak şart. Örnekler konusunda güzel slaytlarından yararlandığım Doç. Dr. Talha Kabakuş hocama teşekkürlerimi sunmadan geçemem. Bir dahaki yazıda koin'le buluşmak dileğiyle sağlıcakla…


#dependencyinjection #android #dagger2 #koin




Komünite

Platform

  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains.png

© 2020 by mobiler.dev

mobilerdevLogo.jpg
mobiler-17.png
mobiler-17.png