Junior — Middle
Можеш ли да дадеш пример за реализиране на принципа за обръщане на зависимостите в проект?
sobes.tech AI
Отговор от AI
Принципът на обръщане на зависимостите (Dependency Inversion Principle, DIP) гласи, че модулите от по-високо ниво не трябва да зависят директно от модулите от по-ниско ниво, а и двамата трябва да зависят от абстракции (например, протоколи или интерфейси).
Пример в Swift за iOS:
// Абстракция
protocol DataService {
func fetchData() -> String
}
// Конкретна реализация
class NetworkDataService: DataService {
func fetchData() -> String {
return "Данни от мрежата"
}
}
// Клас, който зависи от абстракцията, а не от конкретната реализация
class ViewModel {
private let dataService: DataService
init(dataService: DataService) {
self.dataService = dataService
}
func getData() -> String {
return dataService.fetchData()
}
}
// Използване
let networkService = NetworkDataService()
let viewModel = ViewModel(dataService: networkService)
print(viewModel.getData()) // Ще изведе: Данни от мрежата
Тук ViewModel зависи от протокола DataService, а не от конкретната класа NetworkDataService. Това позволява лесно да се сменя реализацията на сервиза, например за тестове или друг източник на данни, без да се променя кодът на ViewModel.