Junior — Middle
Czy możesz podać przykład realizacji zasady odwracania zależności w projekcie?
sobes.tech AI
Odpowiedź od AI
Zasada odwrócenia zależności (Dependency Inversion Principle, DIP) mówi, że moduły wyższego poziomu nie powinny bezpośrednio zależeć od modułów niższego poziomu, lecz oba powinny zależeć od abstrakcji (np. protokołów lub interfejsów).
Przykład w Swift dla iOS:
// Abstrakcja
protocol DataService {
func fetchData() -> String
}
// Konkretna implementacja
class NetworkDataService: DataService {
func fetchData() -> String {
return "Dane z sieci"
}
}
// Klasa zależna od abstrakcji, a nie od konkretnej implementacji
class ViewModel {
private let dataService: DataService
init(dataService: DataService) {
self.dataService = dataService
}
func getData() -> String {
return dataService.fetchData()
}
}
// Użycie
let networkService = NetworkDataService()
let viewModel = ViewModel(dataService: networkService)
print(viewModel.getData()) // Wyświetli: Dane z sieci
Tutaj ViewModel zależy od protokołu DataService, a nie od konkretnej klasy NetworkDataService. To pozwala na łatwą zmianę implementacji serwisu, np. do testów lub innego źródła danych, bez zmiany kodu ViewModel.