
Dependency Injection, projemiz içerisinde ki bağımlılıkları azaltan bir injection yapısıdır.
Her geliştiricinin uyması gereken SOLID kavramları vardır. SOLID, yazılan kodun temiz anlaşılabilir ve evrensel olarak kullanılabilmesi için uyulması gereken prensipler olarak özetleyebiliriz. Projeyi yazan kişi dışında projeye dahil olan başka geliştiricilerin de kodu anlayabilmesi için kesinlikle uyulması gereken kurallar bütünüdür diyebiliriz. SOLID kavramının D kısmı bizim yazımızın prensibidir.
Dependency Inversion Principle,
Bağımlılığı azaltmak için kullanılan bir yöntemdir, prensibin en büyük anlatımı olarak ‘üst seviye sınıfların alt sınıflara bağımlı olmamasıdır.’
Dependency Injection Mantığının Örneği
Dependency Injection, anlatımımıza mantığını anlamanız için kısa bir örnekle anlatalım. Proje oluştururken bu kodu sizden başkalarının da projede çalışabileceğini unutmamalısınız. Herkesin anlayabilmesi için yapılmış olan kurumsal katmanlı mimari üzerinden düşünebiliriz. Katmanlı mimari içerisinde 4 katman bulunuyor bir yazılımcının birikimi hazinesi diyebileceğiniz, hemen her projede kullanabileceğiniz kodlarınızı yazdığınız katman Core katmanıdır. Core katmanı içerisine yazılan kodlar hiç bir zaman başka bir katman içerisinden referans almaz, core katmanınız bütün projenize referans olur ama hiç bir katmandan referans almaz. Core katmanında örnek olarak Email servisiniz ve Sms servisiniz var neredeyse yaptığınız bir çok projede bu servislerden yararlanabiliriz. Bağımsız bir şekilde yazılan bu servisleri kullanım şeklimiz , İş katmanımız içerisinde hangi kural veya sınıf içerisinden Email veya Sms göndermek istiyorsak Sms sınıfını ve Email sınıfını iş kurallarımızın içerisinde inject sonra kullanılabilir hale getirebiliriz. Hem gayet anlaşılabilir bir kod hem de basit bir şekilde injection işlemimizi yaptık. Şimdi örneğimizi basit bir şekilde koda döküp gösterelim.

Öncelikle bir Email servisimizi oluşturduktan sonra EmailService için bir interface oluşturuyoruz.

Interface kodumuzun devamlılığı için kesinlikle kullanmamız gereken kavramlardan bir tanesidir. Interface içinde gerçekleşmesini istediğimizin servisimizi yazıyoruz. Class içerisine implemente ediyoruz.

Daha sonra Sms servisimizi oluşturup, interface oluşturuyoruz interface içersine çalışmasını istediğimiz servisimizi yazıyoruz ve implemente ediyoruz.

Yukarıda yaptığımız gibi tekrar bir interface tanımlıyoruz.

Çok basit bir şekilde daha önce oluşturduğumuz Interfaceleri burada injection işlemimizi yapıyoruz. Class içerisinde tanımladıktan sonrasında çalıştırmak istediğimiz iş içerisine ekliyoruz. Çok basit bir şekilde çalışmaya hazır ve her projede kullanılabilecek bir yapı hazırladık.