Yazılımda SOLID Prensipleri: Dependency Inversion (DIP)
Sürdürülebilir yazılım mimarisi tasarlamak için SOLID'in "D" harfi olan Bağımlılıkların Tersine Çevrilmesi prensibinin incelenmesi.
Genel Bakış
SOLID prensipleri, Nesne Yönelimli Programlama (OOP) tasarımlarını daha esnek, anlaşılır ve bakımı kolay hale getirmek için Robert C. Martin tarafından derlenmiş beş temel kuraldır. Dependency Inversion Principle (DIP - Bağımlılıkları Tersine Çevirme) bu prensiplerin sonuncusudur.
Sorun
Geleneksel yazılım geliştirmede, üst seviye modüller (iş kurallarını içeren sınıflar) genellikle alt seviye modüllere (veritabanı işlemleri, dosya okuma sınıfları) doğrudan bağlıdır. Örneğin, bir "SiparisYonetimi" sınıfı, doğrudan "MySQLVeritabani" sınıfından nesne üreterek (new keyword'ü ile) kullanırsa, ileride Oracle veritabanına geçilmek istendiğinde tüm üst seviye kodların değiştirilmesi gerekir. Bu, kodun sıkı sıkıya bağlı (tightly coupled) olmasına yol açar.
Çözüm: Soyutlamalar (Abstractions) Kullanmak
DIP, üst seviye ve alt seviye sınıfların birbirine değil, her ikisinin de soyutlamalara (interface veya abstract class) bağlı olması gerektiğini savunur.
C# ile Kötü (Sıkı Bağımlı) Tasarım:
public class SiparisYonetimi {
private MySQLDb _db = new MySQLDb();
}
C# ile İyi (DIP'e Uygun) Tasarım:
public interface IDatabase { void Kaydet(); }
public class SiparisYonetimi {
private IDatabase _db;
public SiparisYonetimi(IDatabase db) {
_db = db;
}
}
Teknik Detaylar
DIP uygulandığında, bağımlılıkların yönetimi sınıfların dışına taşınır ve genellikle Dependency Injection (DI) veya Inversion of Control (IoC) container'ları (ör. .NET Core DI, Spring Framework) aracılığıyla içeri enjekte edilir. Bu yapı, birim testleri (unit testing) yazmayı da inanılmaz derecede kolaylaştırır; çünkü veritabanı bağlantısı gerektirmeden, interface üzerinden sahte (mock) nesneler vererek iş mantığı test edilebilir.
Sonuç
Bağımlılıkları tersine çevirmek, yazılım projelerinin değişen gereksinimlere (yeni bir ödeme altyapısı, farklı bir veritabanı) var olan kodu bozmadan uyum sağlamasını garanti eder. "Tak-çıkar" mimarilerin temelidir.