RoboGuice – Android ve Dependency Injection

Bu yazıda beni Volley kadar etkilemesede beğendiğim ve projelerimde kullanmakta olduğum başka bir kütüphaneden bahsedeceğim, RoboGuice.

RoboGuice

EÄŸer Java EE projeleriyle uÄŸraÅŸtıysanız Dependency Injection’ın ne olduÄŸu biliyorsunuzdur. EÄŸer bilmiyorsanız size öncelikle Martin Fowler’ın ÅŸu yazısına alalım. Google Guice Java projelerinde kullanılan bir DI kütüphanesi. RoboGuice ise bu kütüphanenin Android uyarlamasıdır. roboguice

RoboGuice ise temel olarak aÅŸağıdaki nesneleri Activity nesnelerinize “inject” etmenize olanak saÄŸlar

  • Activity xml dosyanızda tanımlı tüm View yapılarını. (LinerLayout, ImageView, TextView vs)
  • Projenizde tanımlı tüm kaynak yapılarını. (Drawables, Strings vs)
  • Android projelerinin size saÄŸladığı servisleri (LocationManager vs)
  • Application Scope’unda tanımlı olan diÄŸer nesneleri

Tüm bu işlemler sizi onCreate methodunda yaptığınız findViewById(..) işleminden kurtaracak ve projenizi daha okunabilir yapacaktır.

RoboGuice’ı projenizde kullanabilmeniz için aÅŸağıdaki maven bağımlılığını eklemeniz ya da linkteki jar dosyasını indirip libs klasörüne yüklemeniz gerekmektedir.

Bundan sonra tek yapanız gereken Activity sınıflarınızı RoboActivity sınıfından türetmektir.

Aşağıda Activity tanımının hem normal versiyonunu hem RoboGuice versiyonunu bulacaksınız.

Normal

RoboGuice

Burada dikkat etmeniz gereken kısım ilk satırdır. Gördüğünüz üzere RoboGuice ile Activity sınıfında injection yapabilmeniz için sınıfınızın RoboActivity’den türetilmesi gerekmektedir. Hemen hemen tüm Activity versyionlarının bir Robo alternatifi bulunmaktadır. ÖrneÄŸin

  • ActivityGroup -> RoboActivityGroup
  • FragmentActivity -> RoboFragmentAvtivity
  • TabActivity -> RoboTabActivity
  • Activity -> RoboActivity

Activity’ler haricinde diÄŸer tüm bean sınıflarına injection yapılabiliyor. Bean’lerinizin içine diÄŸer bean’ler haricinde uygulama genelindeki tüm Manager yapılarını da “inject” edebilirsiniz.

Bean tanımlamak için sadece Singleton scope’unu kullanabiliyorsunuz. Android uygulama yapısını düşündüğünüzde bu durum gayet normal.

 Son

Tüm bu iÅŸlemleri yapmanın baÅŸka yolları’da mevcut. ÖrneÄŸin Singleton pattern yapısını kendiniz oluÅŸturabilirsiniz ya da findById methodlarını kullanabilirsiniz. Fakat sık proje yapıyorsanız ve kendinize ait bir projelerinizde aynı yapıları kullanmak yerine bir kütüphane geliÅŸtirmeyi düşünüyorsanız RoboGuice çok iÅŸinize yarayacaktır. Kütüphaneniz içerisinde tanımladığınız utility’leri ve yapıları kolaylıkla projenize entegre edebileceksiniz.

Referanslar

End of Line