Sobes.tech
Junior — Middle

Vai vari sniegt piemēru, kā īstenot atkarību inversijas principu projektā?

sobes.tech AI

Atbilde no AI

Atkarības inversijas princips (Dependency Inversion Principle, DIP) nosaka, ka augstākā līmeņa moduļiem nevajadzētu tieši atkarīties no zemākā līmeņa moduļiem, bet gan abi jāatkarās no abstrakcijām (piemēram, protokoliem vai interfeisiem).

Piemērs Swift valodā iOS:

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

// Konkrēta realizācija
class NetworkDataService: DataService {
    func fetchData() -> String {
        return "Tīkla dati"
    }
}

// Klase, kas atkarīga no abstrakcijas, nevis no konkrētas realizācijas
class ViewModel {
    private let dataService: DataService

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

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

// Izmantošana
let networkService = NetworkDataService()
let viewModel = ViewModel(dataService: networkService)
print(viewModel.getData()) // Izdrukās: Tīkla dati

Šeit, ViewModel ir atkarīgs no DataService protokola, nevis no konkrētas NetworkDataService klases. Tas ļauj viegli mainīt pakalpojuma realizāciju, piemēram, testiem vai citam datu avotam, nemainot ViewModel kodu.