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 кодун өзгөртпөстөн.