Sobes.tech
Junior — Middle
88

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

Компаније где су питане
Itexus
SimbirsoftSimbirsoft

Одговор од АИ

sobes.tech АИ

Принцип инверсии зависимостей (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.