Dependency Injection Nedir? Neden Kullanırız?

Dependency Injection, Object Oriented Programing kodlama yapmak için class, interface, constructor, property, access modifiers, generic type v.b. bunun gibi birçok kavramı okunabilir, geliştirilebilir, tekrar kullanılabilir, güvenli ve performanslı çalışan uygulamalar yapmak için kullanıyoruz. Bu makalede bunlardan biri olan Dependency Injection nedir ve neden kullanmalıyız konularını örnekler ile işleyeceğiz.

Dependency Injection Nedir? Neden Kullanırız?

Makale Devamında Kullanılacak Kısatmalar

KısaltmaAçılımı
DIDependency Injection
OOP Object Oriented Programing

OOP kodlama yaparken girişte bahsettiğim 5-10 tane terim kullanmıyoruz bu yazdıklarım üzerine onlarca yeni terim daha eklenebilir ama biz bu makalemizde DI’i ele alacağız. DI’yı 3 farklı şekilde kullanabiliyoruz. Bu kullanım alanları ise şöyle;

  1. Constructor Injection
  2. Method Injection
  3. Property Injection

Bu 3 kullanımıda örnekler ile ele alacağız ama örnekleri ele almadan önce başlıktaki Nedir ve Neden sorularına cevap verelim.

Nedir ve Neden sorularına birden cevap vereceğim: bağımlıkları en aza indirmek ve bu bağımlıkları yönetmek konusunu daha sağlıklı hale getirmek için DI inject kullanacağız. Açıklamanın bu şekilde pek anlaşılır olmadığı yazarkende fark ettim ama örnekler üzerinden çok daha anlaşılır olacağını düşünüyorum.
Şimdi 3 farklı kullanım türü olduğunu söylemiştir bunlara sırasıyla örnek verelim ama örneğimizin kurgusunu öncelikle anlatalım örneğimiz Araba üzerine olacak bildiğiniz gibi araçların özellikleri standart olabiliyor. Bunlar Teker sayısı, renk, model, marka gibi özellikler aynı ama değerleri farklı olabiliyor bildiğiniz gibi. Şimdi biz olayı çok fazla karmaşık hale getirmeden bu saydığım özellikler üzerinden gideceğiz.

Uygulamayı kodlamaya geçmeden önce bu örnekte Console Application projesini ve .NET Framework 4.5.2 sürümü kullanacağımı belirtmek istiyorum böylelik yazacağınız bazı kısımların neden bende hata verdi gibi durumların önüne geçmek adına.

IAraba adında bir interface oluşturuyoruz ve bu interface içeriğini şu şekilde dolduruyoruz.

Şimdi bu IAraba arayüzünden türetilmiş 2 araç markası sınıfı oluşturacağız oluşturduğumuz 2 araç markası sınıfları şu şekilde.

Gördüğünüz gibi IAraba arayüzünden türetilmiş 2 farklı Renault ve Fiat araç sınıfı olduğunu görüyoruz.


Constructor Injection

Şimdi DI’i anlayacağımız kısma geçiyoruz ilk önce kodu yazıp sonra yorumlayalım. AracYonetimi adında bir sınıf oluşturuyoruz ve bu sınıfın constructor’indan IAraba arayüzünden türetilmiş sınıfı inject ediyoruz.

Buraya kadar yazdığımız kodları kullanmaya başlayalım. AracYonetimi adlı sınıftan bir örnek alacağız ve bu aldığımız örneğin constructor metodunu kullanarak tüm özelliklerine değerini vermiş oluyoruz. Sonrasında TumOzellikler adındaki metodu kullanıp console ekranına vermiş olduğumuz özelliklerin değerlerinin basıldığını görüyoruz.

Çıktı

TekerSayisi:2
Renk:Color [Red]
Model:500L
Marka:Fiat

AracYonetimi içinde tanımladığımız _araba field’ındaki IAraba arayüzünden türetilmiş sınıf üzerinde değişiklikleri yapmak için TekerSayisiDegistir, ModelDegistir ve RenkDegistir metodlarını kullanacağız ve bu değişikiği console’a bastırarak göreceğiz.

Çıktı

TekerSayisi:4
Renk:Color [Blue]
Model:500X
Marka:Fiat

Görüldüğü üzere metodlar sayesinde AracYonetimi constructor’ina geçtiğimiz IAraba arayüzünden türetilmiş sınıfın özelliklerinde değişikliği yapabiliyoruz new Fiat… yerine new Renault… yazarak başka değişiklik yapmadan Method Dependency Injection’i kullanabiliyoruz.


Property Injection

Property injection’da tek değişen üst örneğimizde yer alan _araba adlı field’i bir özelliğe çeviriyoruz ve constructor’ı kaldırıyoruz(isterseniz constructor aracılığı ile Araba adlı özelliğe değer atayabilirsiniz) AracYonetiminin son haline gözatalım.

AracYonetimi adlı sınıfta yaptığımız değişiklik sonrası şu şekilde kullanıyoruz.

Çıktı önceki constructor injection’daki gibi olduğundan bir daha çıktıyı verip konuyu uzatmak istemiyorum.


Method Injection

Method injection’da consturtor yada özellik tanımlayıp IAraba arayüzünden türemiş sınıfı almayacağız bu defa metodların ilk parametresine IAraba arayüzünü ekleyeceğiz ve bu şekilde IAraba arayüzünden türemiş sınıfları parametre ile elde edeceğiz.

Öncelikle AracYonetimi adlı sınıfı alttaki şekilde değiştiriyoruz.

Gördüğünüz gibi Method Injection yöntemini kullandığımız için tüm metodların ilk parametresine IAraba arayüzünü ekliyoruz.

Method Injection adlı yöntemi uyguladığımız AracYonetimi adlı sınıfın kullanımı ise şu şekilde olacak.

Bu makalede anlatılanları buradaki  github repo’sundan gözatabilir yada pull edip kendinizde örnekler yapabilirsiniz.

Dependency Injection Nedir? Neden Kullanırız?
5 (100%) 1 oy

Murat ÖNER

1989 yılında Kocaelinin Dilovası ilçesinde doğdum ilkokul ve lise eğitimimi Kocaeli’de aldım, önlisans üniversite eğitimimi Mehmet Akif Ersoy Üniversitesi Gölhisar Meslek Yüksekokulu’nda bilgisayar programcılığı bölümünde yaptım. Üniversite dönemi boyunca Microsoft'un student partner projesinde yer aldım ve diğer student partner öğrencileri ile birçok farklı projede yer aldım. Üniversite eğitimi tamamlandıktan sonra staj yapmış olduğum Ries Technologies şirketinde yazılım geliştirici ve web designer olarak görev aldım ardından Gen Yazılım firmasında ERP ve HBYS sistemleri ile ilgili yazılım geliştirmeye devam ettim. Şuan aktif olarak mobil, web ve masaüstü uygulamalar geliştirmeye devam etmekteyim.

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın

%d blogcu bunu beğendi: