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