Back to questions
Simbirsoft
Junior — Middle
71
Можешь дать пример реализации принципа инверсии зависимостей в проекте?
Companies where asked
Itexus
Answer from AI
sobes.tech 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.