Typescript ile Dependency Injection

Hakan Topuz
2 min readNov 25, 2018

--

Merhabalar,

Bu aralar fazlaca ilgimi çeken Angular konusuna eğilmiş durumdayım.Angular ile daha öncesinde tanışmış olmama rağmen, tam manasıyla eğilmeye yeni karar aldım diyebilirim.Öncelikle typescript öğrenmeye başladım.Hazır öğrenmeye başlamışken bu konuda bir yazı paylaşmak istedim.

Typescript ile dependency injection’ı nasıl yapacağımızı göreceğiz.

Dependency injection nedir önce kısaca ondan bahsedeyim.Nesnelerin birbirlerine olan bağımlılıklarının dışardan yüklenmesi, aslında azaltılması diyebiliriz.

Şimdi bu işlemi typescript te nasıl gerçekleştiririz ona bakalım.Database işlemlerini gerçekleştirecek bir sınıf yazacağımızı düşünelim.

Öncelikle interface imizi oluşturuyoruz.

Daha sonra bu interface i implemente eden sınıfımızı oluşturalım.

Mssql database’ini kullanan bir sınıf yazdığımızı düşünüyoruz.Ama yapımızı öyle bir oluşturmalıyız ki daha sonra örneğin MongoDb kullanmaya başlayacak olursak minimum zaman maliyeti ile kolayca bu değişikliği gerçekleştirebilelim.

Şimdi dependency injection’ı gerçekleştirecek sınıfımızı oluşturalım.Bu sınıfımız da gördüğünüz gibi bir constructor var.Bu constuctor IDatabase interface’ini parametre olarak alıyor ve class’ımızda private olarak tanımlanmış IDatabase properties’ine set ediliyor.

Dependency injection’ı bu şekilde sağlamış oluyoruz ki; DatabaseFactory sınıfımıza IDatabase arayüzünü gerçekleyen hangi sınıfı gönderirsek gönderelim başarılı bir şekilde çalışacaktır.

Örneğin şimdi bir de MongoDb için bir sınıf oluşturalım.

Şimdi her iki sınıf için de DatabaseFactory nesnemizi kullanıp çıktıları görelim.

DatabaseFactory nesnemize bir Mssql sınıfınıı bir de MongoDb sınıfı gönderiyoruz.Her ikisi için de başarılı bir şekilde işlemini yapıyor.Aslında factory sınıfımızın, database işlemlerini yapan sınıfa olan bağlılığını kaldırmış oluyoruz.(Loose coupling)

Factory nesnemizde, gönderilen nesneler özelinde hiçbir işlem yok görüldüğü gibi.Mssql ise şu şekilde, Mongo ise bu şekilde davran tarzında bir yapı kurulmuş olsa, dependency injection’ı gerçekleştirmiş olmaktan bahsedemezdik.

Şimdi çıktıları görelim.

Gördüğünüz gibi hangi database tipini gönderdiysek ona göre işlem yapıldı.

Bu yazı da typescript ile alakalı ufak bir bilgi olsun.Javascript frameworklerini özellikle Angular’ı derinlemesine öğrenmeye çalışıyorum.İlerde bu konuda yeni yazılar paylaşabilirim.

Herkese iyi,mutlu kodlamalar.

--

--