Sobes.tech
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.