Balık Tutma Örneği; Balık tutmaya gideceksiniz diyelim,neye ihtiyacınız olur? Olta,Tekne,Yem,Balık Tutmak için ideal bir mekan.Klasik yönteme göre uygulama geliştirdiğinizde,herşeyi kendiniz ayarlarsınız.Olta,Tekne,Yem ve Lokasyonu kendiniz hazırlar öyle balık tutmaya başlarsınız.Ancak Dependency Injection yönteminde bize,»bende tekne,olta ve yem var.Sen sadece güzel bir lokasyon seç der».Ne demek istediğimi birazdan örnekler yaparak anlatacağım.Dependency Injection’da amaç bağımlı bir yapıda extensibility uygulamaktır. Dependency Injection kavramı dependency’den türetildiği için bu kavramı da iyi anlamak lazım.Şöyle bir örnek vereceğim; Balık tutmaya gidiyorsanız Olta ve Yem olmadan balık tutabilir misiniz? Tekne olmasa bile kıyıdan(ideal lokasyon) balık tutabilirsiniz.Ancak balığı tutmanızı sağlayan bileşenler Olta ve Yem’dir.Dolayısıyla eğer Olta ve Yem’iniz yoksa bu iki bileşene muhtaç,bağlısınız demek oluyor.Tabi haliyle de bu iki bileşenimiz Olta ve Yem’in birer Dependency olduğuna kanaat getiririz.Dependency Injection’ı uygularken hedefimiz Dependency’lere direkt erişim olmamalıdır.Demolarımızda DI Container’ları kullanmıyoruz.Ama isterseniz; en popüler olanları sizin seçtim: StructureMap,Castle Windsor,Ninject,Autofac ve Unity.DI Container interfacelerin sayısının arttığı noktalarda devreye girerek işinizi kolaylaştırır.Containerların bir felsefesi vardır: Bize ne yapacağımızı söyleme,biz yaparız,için rahat olsun! Yani Container’lar «Ne Yapılması» gerektiğine karışırlar.Geri kalanı sana bırakırlar.Ne zaman ve nasıl yapacağını sen belirlersin.
Dependency Injection’dan söz ederiz de bağlardan konuşmayacak mıyız? Elbetteki Hayır! Birbirleriyle alakalı konular.Tight Coupling yöntemi küçük projeler için tercih edilse de ihtiyaçlar arttıkça kod karmaşası artacak ve okunabilirlik açısından sıkıntı teşkil etmeyecektir(!) Edecektir elbet! Bu sebeple «Seperation Of Concerns» prensibini uygulayarak Interface’leri işin içine dahil etmemiz gerekir.Interfaceleri işin içine dahil edersek de Loose Coupling yapmış oluruz.Loose Coupling her zaman daha çok tercih edilir.