Data Vinci 1: Dependency Injection

Tahmini Okuma Süresi: 3 dakika

“Chicken translation” yani “mot a mot”  yani “birebir” çeviri yaptığımız zaman. “Bağımlılık enjekte”si gibi bir çeviri çıkıyor. Yani? Ver morfini damardan “keş” olsun çıksın program bu mu olayımız?

Tabi ki değil. Bağımlılık uygulamalarda istenilen bir şey değil. Hoş hiç bir bağımlılık da bilinçli olarak istenmiyordur. Güzel uygulama dediğin başına buyruk nereye koysan çatır çatır çalışandır. Peki o zaman nedir “Dependency injection”?

Yazılım geliştirme yaklaşımlardan birisi uygulamanın bileşenlerinin “gevşek bağlı” olmasıdır. Zaman içerisinde değişen isteklere, uygulamanın cevap verebilmesidir.  Bu bağlamda yazılım tasarlanırken mümkün mertebe yazdığımız kodları “kapsülleyip(encapsulation)” birbirlerinin ne iş yaptığından çok haberdar olmayan bir yapı kurmak gerekmektedir. Bunu yapabilmek için bir takım yöntemler izlenir: Abstraction, Interface yapısı bunların en bilinen ve sık kullanılanları.  Zaman içerisinde değişecek modelleriniz olduğunu düşünüyorsanız bunları asla “concrete” olarak tanımlamamanız gerekir. Bunun yerine interface olarak bir tanım yapıp, değişiklik olan kısımlarını da bu interface’den türeterek implemantasyon yapmak daha doğru olacaktır.

Yazılım geliştirme mottolarınızdan birisi “interface’i programla, implemantasyonu değil” olmalıdır.

Dependency Injection, kendi kurguladığınız yapıyla oluşturulabileceği gibi. Bu amaç için yazılmış kütüphaneleri kullanarak da yapılabilir. Bunların en öne çıkan ve bilinenler şunlar:

Eğer kodlarınızın test edilebilmesi kolaylaştırmak istiyorsanız bu tarz bir yapı kurgulayabilirsiniz veya uygulayabilirsiniz. Bu “mindset” içerisinde yer alan terimlerinden birisi de “IoC(Inversion of Control)”  birbirlerine karışmakta, yazılımcı dimağlarda rahatsızlık yaratmaktadır. Bu başlığa ilerleyen yazılarda değineceğim.

keep_calm

8 Replies to “Data Vinci 1: Dependency Injection”

  1. Güzel yazı güzel motto “interface’i programla, implemantasyonu değil”. Bir Twitter hesabı olsa her yazı geldiğinde oraya aksa falan güzel şeyler. Günümüzde bilgiyi takip etmek zorlaştı. herşey bir ayrı yerde

    1. Aslında bu sitede yazmış olduğum yazıları linkedin ve twitter hesaplarımda link olarak paylaşıyorum.Siteye sosyal hesaplarımın adreslerini ekleyeceğim. Yorumunuz ve geri bildiriminiz için teşekkürler.

  2. Blogunuzdaki yeni yazilan çoğu yaziyi okuduğumu ve espirili yazilarinizin başarılı olduğunu belirtmek isterim.

    Bu yazi hakkinda ise yukarida verdiğiniz unity,ninject gibi araçlar ioc container olup dependency injectiondan farkli bir kavramdir. Sanırım bu makalenin son kısımlarında biraz anlam karmaşası yaşanmış.

    1. “Bu “mindset” içerisinde yer alan terimlerinden birisi de “IoC(Inversion of Control)” birbirlerine karışmakta, yazılımcı dimağlarda rahatsızlık yaratmaktadır.” cümlesiyle aslında bu karmaşaya değindim. Dependency Injection için bir IoC formu diyebiliriz diye düşünüyorum. Bu bakışta Unity, Ninject gibi araçları da dependency injector olarak nitelemek mümkün. Bir IoC container kullanarak DI oluşturamadığımızı söylüyorsanız, düzeltme olarak seve seve ekleyebilirim veya gerekli düzeltmeyi yapabilirim. Kimseye yanlış bilgilendirmeyeyim.
      Dikkatiniz ve katkınız için teşekkür ederim.

Leave a Reply

Your email address will not be published. Required fields are marked *