Bu yazımızda Dependency Injection Nedir? sorusuna ve kullanımına bakacağız. Dependency Injection (DI), modern yazılım geliştirmede kullanılan önemli bir tasarım deseni olup, nesneler arasındaki bağımlılıkları yönetmek için bir yol sunar. DI, bağımlılıkların bir sınıfa dışarıdan enjekte edilmesini sağlar, böylece sınıfın kendi bağımlılıklarını oluşturmak yerine dışarıdan aldığı bağımlılıklar üzerinden işlemler yapmasını mümkün kılar. Bu yaklaşım, kodun daha esnek, yeniden kullanılabilir ve test edilebilir olmasını sağlar.
Örnek verecek olursak Gençay Hocam'dan alıntı yapmak isterim.
Dependency Injection'ın Avantajları:
Kodun Modülerliği ve Esnekliği:
DI, sınıflar arası bağımlılıkları dışarıdan sağlayarak kodun modüler yapıda olmasını sağlar. Bu sayede, sınıflar arasındaki bağımlılıklar kolayca değiştirilebilir ve yeni bağımlılıklar eklenebilir.
Test Edilebilirlik:
DI, bağımlılıkları dışarıdan enjekte ettiği için birim testlerin yapılmasını kolaylaştırır. Sınıfların bağımlılıklarını kolayca mock (taklit) ederek testler yazılabilir ve bu sayede kodun doğruluğu daha güvenilir bir şekilde test edilebilir.
Kodun Tekrar Kullanılabilirliği:
DI sayesinde, sınıflar arasındaki bağımlılıklar gevşek şekilde bağlanır, bu da kodun farklı projelerde tekrar kullanılabilirliğini artırır.
Bakım Kolaylığı:
Kodun bağımlılıkları merkezi bir yerden yönetildiği için, herhangi bir değişiklik gerektiğinde bu değişiklikler kolayca yapılabilir. Bu da bakım süreçlerini hızlandırır ve hata yapma olasılığını azaltır.
Dependency Injection'ın Dezavantajları
Öğrenme Eğrisi:
DI ilk defa karşılaşan geliştiriciler için karmaşık görünebilir. Özellikle büyük projelerde DI kullanımı zorlayıcı olabilir ve doğru bir şekilde uygulanması zaman alabilir.
Performans Sorunları:
DI, nesneleri oluşturmak için runtime'da (çalışma zamanında) ekstra işlem yapar. Bu da performans üzerinde hafif bir yük oluşturabilir, ancak bu genellikle büyük bir sorun değildir.
Yüksek Bağlantı Karmaşıklığı:
DI kullanırken, özellikle büyük projelerde bağımlılık zincirleri karmaşık hale gelebilir ve bu durum kodun takibi ve yönetimi zorlaştırabilir.
DI yaklaşımında 3 farklı bağımlılık türü bulunmakta. Bunlar 'Transient,Scoped ve Singleton' peki bunların farkı ne dersek şöyle açıklayabilirim.
Transient : Bu .Net Core'daki varsayılan yaşam süresidir. Bir servisin her talep edildiğinde yeni bir objenin oluşması ve bu objenin sadece o talep sırasında kullanılmasını istiyorsanız bağımlılığı 'Transient'
olarak ayarlayabilirsiniz.
Scoped : İstek atan servise özel olarak oluşan obje istek sonrası sonlandırılır. Transient bağımlılığından farkı ne diye sorarsak; diyelim ki istek atıldı ve bu istek servis ve controller'da ayrı ayrı çağırıldı burada servis ve controller'da kullanılan obje istek attığımız sırada oluşan objedir. Transient bağımlılığında ise aynı örneği düşünürsek servis için ayrı bir obje controller için ayrı bir obje oluşacaktı.
Singleton : Uygulamanın genelinde tek bir hizmet ve tek bir kaynak kullanmak istiyorsanız bu bağımlılığı kullanabilirsiniz. Her talep sırasında yeni bir obje oluşturmak yerine ilk oluşan objeyi paylayaşarak bu bağımlılığı sürdürebilirsiniz.
Dependency Injection Kullanımı
Şimdi ilk olarak DI desenini uygulamak için bir interface tanımlayacağız. Tanımladığımız bu Interface’den kalıtım alan tüm sınıflar Interface’in şartını sağlayacaktır.
Interface'i oluşturduktan sonra istediğimiz araçları artık bu Interface'den türetebileceğiz.
Artık hazırladığımız DI desenini 'Taşıt' sınıfına uygulayabiliriz.
Bu şekilde Dependency Injection için basit bir yaklaşımla kullanımını görmüş olduk. Umarım bilgilendirici bir yazı olmuştur. Diğer yazılarımda görüşmek üzere. Elinize Kuvvet!.
Comments (1)
JWT( JSON Web Tokens ) Nedir? Kullanımı, Authentication ve Authorization İşlemleri – Rıdvan Güvensays:
Aralık 1, 2024 at 5:28 pm[…] başlıyoruz. Dependency Injection ile alakalı daha detaylı bilgiye sahip olmak isterseniz buraya tıklayarak ilgili yazımı okuyabilirsiniz.CreateTokenHandler adında bir method oluşturup az […]