Sobes.tech
Junior — Middle

Կարող եք տալ մի օրինակ՝ ինչպես իրականացնել կախվածությունների հակադարձման սկզբունքը նախագծում?

sobes.tech AI

Պատասխան AI-ից

Ավելի բարձր մակարդակի մոդուլները պետք չէ ուղղակիորեն կախված լինեն ցածր մակարդակի մոդուլներից, երկուսն էլ պետք է կախված լինեն աբստրակցիաներից (օրինակ, պրոտոկոլներից կամ ինտերֆեյսներից):

Օրինակ 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 կոդը փոխելու: