Dependency Injection(DI) Nedir? - Öner Bilişim
Demo Talep Edin

Dependency Injection(DI) Nedir?

Martin Fowler’in ortaya attığı Dependency Injection(DI) yani Bağlılık Enjeksiyonu kavramı nesne yönelimli programlama da kullanılan nesnelerin oluşturulmasına ve bağımlılıklarının enjekte edilmesine izin veren bir tasarım desenidir. Bir nesneyi oluştururken kullanılmasından ayrı tutmaya yardımcı olur ve daha kolay bakımı yapılabilir, daha kolay test edilebilir koda sahip olmamızı sağlar. Dependency Injection, bir sistemin farklı bileşenleri arasındaki bağlantıları azaltmak için yazılım geliştirmede kullanılan bir modeldir. Bağlantı dediğimiz şey bir bileşenin başka bir bileşene bağlı olma derecesini ifade eder. 

Genel bir anlamda, geleneksel programlamada, nesneler çoğunlukla diğer nesnelerin içerisinde oluşturulur. Bu durum daha sıkı bağlantılara yol açar ve sistemin güncelleştirilmesini ve değiştirilmesini çok daha zor bir durum kılar. Dependency Injection sayesinde nesneleri doğrudan oluşturmak yerine, diğer nesnelere bağımlılıklar olarak enjekte edebiliriz. Dependency Injection, nesnelere işlerini yapmak için ihtiyaç duydukları nesneleri yani bağımlılıkları, nesnenin bu bağımlılıkları kendisinin yapmasına gerek kalmadan, sağlamanın bir yoludur. Bu bağımlılıklar ne olabilir derseniz, diğer nesneler, hizmetler ve basit veri yapıları olabilir. 

Dependency Injection, yapıcı enjeksiyonu, ayarlayıcı enjeksiyonu ve arayüz enjeksiyonu gibi çeşitli şekillerde de yapılabilir. Yapıcı enjeksiyonunda (Constructor Injection), bağımlılıklar nesneye yapıcısı aracılığı ile aktarılır. Ayarlayıcı enjeksiyonunda (Setter Injection), bağımlılıklar ayarlayıcı yöntemlerle iletilir. Arayüz enjeksiyonunda (Interface Injection) nesne, bağımlılıkları tanımlayan bir arayüz uygular ve bağımlılıklar bu arayüz aracılığı ile iletilir. 

Biraz Dependency Injection faydalarından bahsedelim. Dependency Injection faydaları arasında esnekliğin artışı, çok daha iyi kod bakımı, çok daha kolay test etme bulunur. Nesnelerin oluşturulmasını kullanımlarından ayırarak, kodun geri kalan kısmını etkilemeden bağımlılıkları değiştirmek, düzeltmek daha kolay bir hale gelir. Ayrıca önemli ayrıntılarından bir tanesi olarak da, test aşamasında sahte bağımlılıklarında var olabileceğinden, nesneleri tek başına da test etmeyi sağlar ve kolaylaştırır. Bu sayede farklı bir test aşamasına ihtiyaç duyulmadan sistemin ayrı bileşenlerini test etmeye olanak sağlar. 

 

DEPENDENCY INJECTION NASIL UYGULANIR?

Dependency Injection, kullanılacak programlama diline, çerçeveye ve mimariye bağlı olarak farklı şekillerde uygulanabilir. Dependency Injection uygulamalarının yaygın yolları şunlardır:

Yapıcı Enjeksiyon: Bu kavramda bağımlılıklar nesnenin yapıcısı aracılığı ile iletilir. Nesne yapıcı parametreleri bildirir ve nesneyi oluşturmaktan sorumlu olan bağımlılık enjeksiyon çerçevesi veya kodu bu bağımlılıkları sağlar. Yapıcı enjeksiyon değişmezliği destekleyerek genelde nesnenin çalışması için tüm bağımlılıklar gerektiğinde tercih edilir. 

Ayarlayıcı Enjeksiyon: Bu kavramda bağımlılıklar ayarlayıcı metotları ile iletilir. Nesne, her bir tanesi belirli bir bağımlılık ayarlayan bir dizi ayarlayıcı yöntemlere sahiptir. Ayarlayıcı enjeksiyon, nesne oluşturulduktan sonra da bağımlılıkları değiştirip, düzeltmenize izin verdiği için yapıcı enjeksiyonundan daha fazla esneklik ve kolaylık sağlar. 

Arayüz Enjeksiyonu: Bu kavramda, nesne gerekli bağımlılıkları tanımlayan bir arayüz uygular. Nesne, arayüz aracılığı ile bu bağımlılıklara sağlanır. Arayüz enjeksiyonu, diğer enjeksiyonlara bakarak daha az yaygın olarak kullanılır, ancak çalışma vaktinde bağımlılıkların dinamik enjeksiyonuna izin verir. 

Otomatik Bağımlılık Enjeksiyonu: Birçok modern çerçeve ve kitaplığı Otomatik Bağımlılık Enjeksiyonu sağlar. Bu şekilde, çerçeve oluşturulduğunda ya da talep edildiğinde bir nesneye otomatik olarak bağımlılıklar enjekte eder. Çerçeve, bağımlılıkları ve bunların nasıl sağlanacağını belirleyerek kuralları ve ek açıklamaları kullanır. 

Hizmet Bulucu: Bu kavramda nesne bağımlılıklarını sağlamak için Hizmet Bulucu’yu kullanır. Hizmet bulucu nesnenin ihtiyaç duyduğu bağımlılıkları sağlamak için kullanabileceği, hizmetlerin ve bağımlılıkların merkezi bir noktasıdır. Hizmet Bulucu, nesneler ve Hizmet Bulucu arasında daha sıkı bağlantı oluşturarak kolaylık sağlamadığı için diğer yaklaşımlara göre daha az tercih edilir. 

Dependency Injection, genel olarak önce bir nesnenin gerektirdiği bağımlılıkları tanımlar ve sonrasında bu bağımlılıkları yukarıda açıkladığımız kavramlardan biri aracılığı ile sağlayarak uygular. 

Bu bağımlılıkları oluşturmak ve enjekte edebilmek için kod yazılarak manuel şekilde uygulanabilir veya Dependency Injection sağlayan bir çerçeve ya da kitaplık kullanılarak otomatik olarak yapılabilir. 

DEPENDENCY INJECTION İLE NELER YAPILABİLİR? 

Dependency Injection, daha iyi yazılım sistemleri geliştirmek için yardımcı olabilecek çeşitli avantajlar sağlar. Dependency Injection ile yapılabilecek bazı şeyler şunlardır:

1.Bileşenleri Ayırma: Dependency Injection, bir sistemin bileşenlerini ayırmaya yardımcı olarak, kodun geri kalan kısmını etkilemeden bunların değiştirilmesini kolaylaştırır. Nesnelerin oluşturulmasını kullanımlarından ayırarak, nesnelerin uygulamalarını, onları kullanan kodları değiştirme işlemini zor durumda kalmadan değiştirebilirsiniz. 

  1. Yeniden Kullanılabilirliği Teşvik Etme: Dependency Injection, bileşenlerin sistemin farklı bölümlerinde ya da diğer sistemlerde yeniden kullanılmasını kolaylaştır. Bileşenler sıkı bir şekilde bağlı olmadan değişiklik gerektirmeden farklı bağlamlarda kullanılabilirler. 
  2. Test Edilebilirliği Arttırma: Dependency Injection, bileşenlerin bağımlılıklarının ayrı ayrı test edilmesine izin verir ve test edilebilirliği arttırır. 
  3. Modülerliği Teşvik Etme: Dependency Injection ile her bileşenin bir sorumluluğu vardır ve bağımlılıkları açıkça tanımlanmıştır. Bu şekilde bileşenlerin bağımsız olarak geliştirilebileceği ve bakımının yapılabileceği daha modüler bir kodu sağlar. 
  4. Bakımı Basitleştirme: Dependency Injection, bileşenler arasındaki bağımlılık sayısını azaltarak kod tabanının bakımını daha kolay hale getirir. Bu şekilde anlaşılması ve değiştirilmesi daha kolay bir kod tabanını oluşturmayı sağlar. 

Haberdar olun.

Öner Bilişim yenilikleri ve iş çözümlerine ilişkin gelişmelerden haberdar olun.