Dependency Injection Nedir? - TR

July 20th 2019

Dependency Injection sınıflar arasındaki bağımlılıkları sistematik olarak yönetebilmek için geliştirilmiş bir yazılım geliştirme yaklaşımıdır.

Daha açık olmak gerekirse sınıfın içinde nesneyi oluşturma, o nesneyi o sınıfa parametre olarak ver demektir.

Neden Kullanırız ?

Daha önce oluşturulmuş sınıflarla benzer işleri yapan yeni bir sınıf oluşturulduğu zaman, en az kod değişikliği ile yapılabilmesine olanak sağlar.

Bir kredi kullandırım uygulaması tasarladığımızı varsayalım. Bu kredi kullandırım uygulamanızda yer alan kredi tiplerini tek bir sınıfta kontrol edebileceğimiz gibi (tercih edilmemesi gerekir) ayrı sınıflar şeklinde de yönetmek mümkündür.

Kredi tiplerinin ortak kullandığı metodlar olacaktır. Örneğin kullandırım işlemini başlatan bir servis tüm kredi tipleri için aynı olmasına rağmen içinde yer alan business katmanı birbirinden farklılaşmaktadır. Bundan dolayı bir adet interface’e ihtiyacımız olacak. ILoan.java ismini verdiğimiz interface oluşturuyoruz. Bu interface her kredi tipi için ortak kullanılacak metodları tanımladığımız kısımdır.

Ardından bu interface'i implement edecek olan kredi tiplerimizi oluşturuyoruz.

Kredi başvurularını yöneten bir manager sınıfına ihtiyacımız bulunmakta. Bu sınıf ile aslında bir katman daha ekleyerek kredi tiplerini soyutlamış oluyoruz.

Burda dikkat edilmesi gereken nokta dependency injection adımını yönettiğimiz kısım LoanManager sınıfıdır. Bu sınıfa ait bir constructor oluşturuyoruz. ILoan interface’imizi parametre olarak veriyoruz.

Application sınıfımız içerisinde LoanManager nesnemizi oluşturuyoruz. Parametre olarak ILoan interface'ini implement etmiş bir kredi nesnemizi veriyoruz. Bu aşamadan sonra dilersek bu uygulamanın farklı bir kredi tipi ile çalışmasını sağlamamız oldukça kolay hale geliyor. Değiştirmemiz gereken tek yer LoanManager sınıfımızı oluştururken parametre olarak new'lediğimiz sınıfımızın adını değiştirmek.

Günümüzde güncel frameworkler aracılığıyla bu yöntem daha da soyutlanmış halde yönetilmektedir. Spring Framework tarafında bu işlem Inversion of Control ile yönetilmektedir.