Dependency Injection Nedir?

The future has several names. For the weak, it is impossible; for the fainthearted, it is unknown; but for the valiant, it is ideal.

Victor Hugo

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. Peki avantajı nedir? Daha önce oluşturulmuş sınıflarla benzer işleri yapan yeni bir sınıf oluşturduğun zaman bunu en az kod değişikliği ile yapılabilmesine olanak sağlar.

Örneğin kredi kullandırım uygulamanız var. Bu kredi kullandırım uygulamanızda yer alan kredi tiplerini tek bir sınıfta kontrol edebileceğimiz gibi -her bir kredi tipi için bir if aç gibi- Dependency Injection yaklaşımıyla, SOLID prensiplerine uygun şekilde de geliştirme yapabiliriz.

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.

Trick : Java 8 ile birlikte interfaceler de kod bloklarını içine alabilir hale geldiler.

ILoan.java

Ardından ILoan interface’ini implement eden kredi tiplerimize ait classlarımızı oluşturuyoruz.

CommercialLoan.java
StudentLoan.java

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.

LoanApplicationManager.java

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

Ardından uygulamamızın main sınıfı olan StartApplication.java classımızı yazıyoruz.

StartApplication.java

Burda yeni bir LoanApplicationManager objesi oluşturuyoruz. Oluştururken de içine ILoan interfaceini implement etmiş bir kredi tipi nesnemizi veriyoruz. Bu aşamadan sonra dilersek bu uygulamanın farklı bir öğrenci kredi tipi ile çalışmasını sağlamamız mümkün hale geliyor.

Kısacası nesneyi LoanApplicationManager sınıfı içinde oluşturmak yerine LoanApplicationManager sınıfına parametre olarak veriyoruz.

Günümüzde güncel frameworkler aracılığıyla bu yöntem çeşitli yöntemlerle bir kat daha soyutlanabilir hale gelmiştir. Spring Framework tarafında bu işlemi gerçekleştiren Inversion of Control ile gerçekleştirilmektedir.

Projeye ait kaynak kodlara GitHub üzerinden ulaşabilirsiniz.

Link

Dependency Injection Nedir?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön