Dependency Injection Nedir?

Hasan Kucuk
2 min readApr 23, 2019

--

Herkese merhaba,

Öncelikle bu yazı Dependency Injection’un ne olduğunu, faydasını ve Android projemizde nasıl kullanabileceğimizi açıklar nitelikte olacaktır.

Dependency Injection (Bağımlılık Enjeksiyonu)

Dependency Injection, S.O.L.I.D prensiplerinin 5. ayağını oluşturan “Dependency Inversion” prensibinin uygulanmasını içeren bir patterndir.

Dependency Injection temel olarak bağımlılıkların kontrolü ve yönetimi için kullanılmaktadır. Peki nedir bu bağımlılıklar?

Nesneye yönelik programlama dillerinde bir nesne oluşturulur ve bu nesne görevini yaparken diğer nesnelerle iletişim halindedir. Bu da bağımlılıkları oluşturur. Java’da sıklıkla karşılaşılan NullPointerException aslında new operatörüyle gerekli nesnenin oluşturulamadığından yani bağımlılık duyulan nesne sağlanamadığından gerçekleşmektedir.

Bu durum nesne yönelimli programlama açısından olumsuz bir durumdur. Sağlıklı, esnek ve genişletilebilir bir proje için mümkün olduğunca bağımlılıklar azaltılmalı ve yönetilebilir olmalıdır.

İşte örnek bir bağımlılık yönetimi;

Müşterinin bir Android uygulama ürettiği bir class’ımız olsun. Burada müşteri tipinde bir müşteri oluşturup daha sonra içerisinde bulunan fonksiyondan bir android uygulama üretiyoruz.

Buradan Customer class’ımızın içerisine gidelim.

Burada bir adet AndroidDeveloper nesnesinin üretildiğini görüyoruz. Yani bir uygulama üretmek için Customer nesnesi AndroidDeveloper nesnesini oluşturmak zorunda. Bu durum sıkı bir bağlılık oluşturur. Bu istenmeyen durumu gidermek için Customer nesnesini AndroidDeveloper oluşturma sorumluluğundan kurtaralım.

Artık Android bir uygulama üretmek istendiğinde dışarıdan bir AndroidDeveloper nesnesi enjekte edeceğiz.

Fakat bu sefer müşterinin aynı uygulamanın iOS versiyonunu da istediğini düşünelim. Bu durumda yeni bir iOSDeveloper eklememiz gerecek fakat constructor’da tanımlı olan nesne AndroidDeveloper nesnesi olduğu için iOSDeveloper dahil edemiyoruz. Bunu aşmak için her iki nesnenin de ortak özelliklerini bir interface altında toplamalıyız. Ve bu interface’i constructor’a parametre olarak eklemeliyiz.

Interface yardımıyla nesnemizi oluşturduk;

Artık müşteri bir uygulama oluşturmak istediği zaman dilediği gibi iki nesne için oluşturabilir.

Daha yakından bakmak gerekirse;

Dependency Injection tekniğinde bağımlılık oluşturacak parçalarının ayrılıp, bunların sisteme dışarıdan verilmesi (enjekte edilmesi) ile meydana gelir.

Temel olarak 3 tür DI vardır. Bunlar; Constructor Injection, Setter Injection, Method Injection) Tüm yöntemler bağımlı olan sınıfları dışarıdan enjekte etmeye dayanır.

Dependency Injection Sayesinde;

  • Gevşek bağımlılıklı, esnek uygulamalar oluşturabiliriz.(Loosely Coupled)
  • Uygulama içerisinde değişmesi, müdahale edilmesi gereken yerleri minimum’a indirir. (Böylece sayfalarca refactoring etmek zorunda kalmazsınız.)
  • Test edilebilirliği destekler.
  • Boiler Plate kodu azaltır.

Yararlandığım Kaynaklar;

--

--