Sobes.tech
Junior — Middle

Ar galite pateikti pavyzdį, kaip įgyvendinti priklausomybių inversijos principą projekte?

sobes.tech AI

Atsakymas iš AI

Principas, kuris sako, kad aukštesnio lygio moduliai neturėtų tiesiogiai priklausyti nuo žemesnio lygio modulių, o abu turėtų priklausyti nuo abstrakcijų (pavyzdžiui, protokolų ar sąsajų).

Pavyzdys Swift kalba iOS:

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

// Konkretus įgyvendinimas
class NetworkDataService: DataService {
    func fetchData() -> String {
        return "Tinklo duomenys"
    }
}

// Klasė, kuri priklauso nuo abstrakcijos, o ne nuo konkrečios įgyvendinimo
class ViewModel {
    private let dataService: DataService

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

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

// Naudojimas
let networkService = NetworkDataService()
let viewModel = ViewModel(dataService: networkService)
print(viewModel.getData()) // Išves: Tinklo duomenys

Čia, ViewModel priklauso nuo DataService protokolo, o ne nuo konkrečios NetworkDataService klasės. Tai leidžia lengvai keisti paslaugos įgyvendinimą, pavyzdžiui, testavimui ar kitam duomenų šaltiniui, nesikeičiant ViewModel kodo.