Sobes.tech
Junior — Middle

Môžeš uviesť príklad implementácie princípu invertovania závislostí v projekte?

sobes.tech AI

Odpoveď od AI

Princíp inverzie závislostí (Dependency Inversion Principle, DIP) hovorí, že moduly vyššej úrovne by nemali závisieť priamo na moduloch nižšej úrovne, ale že obe by mali závisieť od abstrakcií (napríklad, protokolov alebo rozhraní).

Príklad v Swift pre iOS:

// Abstrakcia
protocol DataService {
    func fetchData() -> String
}

// Konkrétna implementácia
class NetworkDataService: DataService {
    func fetchData() -> String {
        return "Dáta zo siete"
    }
}

// Trieda závislá od abstrakcie, nie od konkrétnej implementácie
class ViewModel {
    private let dataService: DataService

    init(dataService: DataService) {
        self.dataService = dataService
    }

    func getData() -> String {
        return dataService.fetchData()
    }
}

// Použitie
let networkService = NetworkDataService()
let viewModel = ViewModel(dataService: networkService)
print(viewModel.getData()) // Vytlačí: Dáta zo siete

Tu ViewModel závisí od protokolu DataService, nie od konkrétnej triedy NetworkDataService. To umožňuje ľahko meniť implementáciu služby, napríklad pre testovanie alebo iný zdroj dát, bez zmeny kódu ViewModel.