Dependency Injection Nedir ? .Net İle Örnek Senaryo

Merhaba Arkadaşlar,

Bu yazımda yazılım geliştirme süreçlerinden proje tasarım aşamasında yer alan Dependency Injection’a biraz değineceğim. Çoğu zaman gerek çok profesyonel ekibin yer almadığı yazılım projelerinde direkt olarak ürünün ilerisi pek düşünülmeden üst üste kodları yazıp proje bitirilmek istenir. Sonucunda elimizde pek de esnek olmayan, ekleme ve çıkarım yapmanın çok zor olduğu bir ürün olmuş olur. Haliyle müşteri ihtiyaçları değişkenlik göstereceği  için ve bu değişiklikleri yapmak için yüksek emek ve zaman maliyeti gerektiren bir hantal yapı oluşmuş olur.

“Dependency Injection” yaklaşımının temel amacı bu birbirine sıkı sıkı bağlı olan modülleri, iş parçalarını ayrı ve olabildiğince birbirinden bağımsız olarak tasarlamak (loosely coupled/gevşek bağlı) ve doğal olarak proje içierisinde yapılacak değişiklikleri minimuma indirmektir.

Bu yaklaşımın projelerimiz esneklik katacağını ve yönetiminin kolaylaşacağını belirttik. Biz de buna uygun örnek basit bir senaryoyla Dependency Injection’u C# projemizde uygulamaya çalışalım 🙂

Örnek senaryomuzda cloud based storage servislerine dosya yükleyen metodlarımız ve ilgili web servislerimiz  olduğunu farzedelim.

Gelelim uygulamamızı console ekranında çalıştırmaya

 

Bu şekilde ekranımıza Google Cloud servislerinden gelen cevabı yazdırmış. oluyoruz. Fakat metodlarını yazdıgımız baska bir cloud storage’a dosyalarımı yüklemek istersek ne yapacağız? Her bu değişken istekde eski kod bloklarını yorum satırına alıp yenileriyle mi değiştireceğiz? Daha büyük çaplı işlemler için düşündüğümüz zaman biraz uğraştırıcı olduğunu farkettiniz değil mi? 🙂 İşte tamda burada Dependency Injection’un yardımımıza yetişeceğini anlıyoruz.

Öncelikle bu ortak işlemler için bir adet interface tanımlıyoruz.

Daha sonra oluşturduğumuz interfaceden inherit edecel providerlarımızı oluşturalım.

Ve de oluşturduğumuz providerlar için interface sınıfı yaratan bir processor sınıf oluşturalım.

Bu kadar. Geriye sadece uygulamamızda oluşturduğumuz yapıyı kullanmak kalıyor. Bunun için örneğin bir config dosyasında kullacağımız cloud servis tipini tutuyoruz ve dinamik bir şekilde o tipe göre uploader nesnemizi yaratıp kullanıyoruz.

İşte bu kadar. Uyguladığımız yapı sayesinde projenin akışına dinamiklik kazandırmış olduk. Farklı bir depolama alanına dosyamızı yüklemek istersek config dosyasında sadece değeri değiştirmek olacaktır. Bu yapı sayesinde oluşturduğumuz yapılar arasında bağımlılığı en aza indirmiş olduk. Bu yapıya ise “Dependency Injection” denilmektedir.

Bir cevap bırakın
Son Yazılar