Sobes.tech
Junior — Middle

Poți să dai un exemplu de implementare a principiului inversării dependențelor într-un proiect?

sobes.tech AI

Răspuns de la AI

Principiul inversiunii dependențelor (Dependency Inversion Principle, DIP) afirmă că modulele de nivel superior nu trebuie să depindă direct de modulele de nivel inferior, ci ambele trebuie să depindă de abstracții (de exemplu, protocoale sau interfețe).

Exemplu în Swift pentru iOS:

// Abstracție
protocol DataService {
    func fetchData() -> String
}

// Implementare concretă
class NetworkDataService: DataService {
    func fetchData() -> String {
        return "Date din rețea"
    }
}

// Clasă care depinde de abstracție, nu de implementarea concretă
class ViewModel {
    private let dataService: DataService

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

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

// Utilizare
let networkService = NetworkDataService()
let viewModel = ViewModel(dataService: networkService)
print(viewModel.getData()) // Va afișa: Date din rețea

Aici, ViewModel depinde de protocolul DataService, nu de clasa concretă NetworkDataService. Acest lucru permite schimbarea ușoară a implementării serviciului, de exemplu, pentru teste sau altă sursă de date, fără a modifica codul ViewModel.