Sobes.tech
Back to questions
Junior — Middle
71

Можешь дать пример реализации принципа инверсии зависимостей в проекте?

Companies where asked
Itexus
SimbirsoftSimbirsoft

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.