İçeriğe geç

Dependency Inversion Principle nedir ?

Merhabalar bu yazımda “SOLID” yazılım prensipleri yazı serimden sonu olan Dependency Inversion Principle (Bağımlılığın Ters Çevrilmesi Prensibi) hakkında bilgi vereceğim.

Bu prensibimizde mantık olarak Üst ve alt sınıfların birbirlerine bağımlı olmalarına karşı çıkan bir prensiptir. Bu bağımlılığın interface ile giderilmesine dayanır. Dikkat ederseniz tüm bu prensipler genel anlamda aynı mantığı taşımaktadır. Amaç projelerdeki zaman maliyetini düşürmek ve projeye sonradan eklenecek yapıların projeye girişini, okunabilirliğini ve yenilenebilirliğini artırmaktır.

Aşağıdaki yazdığım örnekte basit bir log sistemi modellemesi yaptım. Burada bulunan sınıflar interface’de bulunan methodları kullanmaktadırlar. Bu sınıfların işlemlerini gerçekleştirmek için bulunan arayüze bağlı olmayan LogManager sınıfı sayesinde eklenen log sınıflarını kontrol edebiliyoruz. Böylelikle DI prensibine uygun olarak üst sınıfımız alt sınıflara bağlı kalmamış oluyor.

import Foundation

protocol Logger {
    func addLog(msg:String)
    func messages() -> String
}

class DBLogger: Logger {
    
    func addLog(msg: String) {
        print(msg)
    }
    
    func messages() -> String {
        return "DB log --> # <--"
    }
}

class ChatLogger: Logger {
    
    func addLog(msg: String) {
        print(msg)
    }
    
    func messages() -> String {
        return "Chat log --> # <--"
    }
}

class ServiceLogger: Logger {
    
    func addLog(msg: String) {
        print(msg)
    }
    
    func messages() -> String {
        return "Service log --> # <--"
    }
}

class LogManager {
    
    var logger: Logger!
    
    func log() -> String {
        return logger.messages()
    }
}

let serviceLogObj = ServiceLogger()

let manager = LogManager()
manager.logger = serviceLogObj
manager.log() // "Service log --> # <--"

 

Tarih:Design Principles

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca