Inversion Of Control Nedir ?
IOC, nesnelerin yönetiminin bir framework veya bir container içerisine verilmesi işlemidir. Nesnelerin oluşturulması, konfigürasyonu, yok edilmesi gibi olaylar bir container tarafından yönetilir. Bu durumda programcılar nesnelerin yaratılması, yaratılan nesnelerin oluşturulması anındaki detayları, yaşam döngüsünü efektif bir biçimde ele alma durumundan kurtulmuş olacaktır.
Dependency Inversion Prensibi Nedir ? (Bağımlılıkların Tersine Çevrilmesi)
Nesne yönelimli programlama metodolojisi ile yazılımın geliştirildiği ortamlarda ilerleyen süreçlerde nesneler arası bağ kurmak zorlaşabiliyor. Bir nesnede yapılan değişiklikler veya yerine başka nesne koymak problemlere yol açabiliyor. Bunun için Dependency Inversion gibi prensiplere ihtiyaç duyuyoruz. Dependency Inversion, sınıfların birbirleri arasında “loosely coupled” yani “gevşek bağlı” olması anlamına geliyor. Yüksek seviye sınıfların, düşük seviye sınıflara direkt bağlı olmaması ve her ikisinin de soyutlamalara bağlı olmasını bekler.
Örnek vermek gerekirse yukarıdaki diyagramda görüldüğü üzere ExceptionReporter sınıfı üzerinde OracleDatabase isimli bir sınıfın nesnesi yaratılıp kullanılıyor. İlerleyen zamanlarda oracleDatabase nesnesi yerine başka bir DB konfigürasyonu yapılmak istendiğinde kod üzerinde değişiklikler gerekecektir. Bunun önüne geçebilmek için soyut sınıfları kullanarak üst seviyeli sınıfın bağımlılığını azaltıyoruz.
Dependency Injection Deseni Nedir ?
Nesnelerin oluşturulması işleminden ioc prensibinin sorumlu olduğunu söyledik. Buradaki nesnelerin enjekte edilmesi durumu ioc container tarafından yönetilir. Dependency injection ise bu kullanılan nesnelerin diğer nesnelere nasıl enjekte edileceğini belirleyen yöntemdir.