Sobes.tech
Junior — Middle

Կարող եք բացատրել Dependency Injection և Dependency Inversion հասկացությունների տարբերությունները ծրագրային ապահովման զարգացման համատեքստում?

sobes.tech AI

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

Աշխատանքային կախվածությունների ներդրում (DI) — դա նախագծման ձևաչափ է, որի ժամանակ օբյեկտի կախվածությունները նրան դուրսից փոխանցվում են, ոչ թե ներսում ստեղծվում։ Սա թույլ է տալիս հեշտությամբ փոխել կախվածությունների իրականացմանը, պարզեցնում է փորձարկումները և բարձրացնում է կոդի մոդուլայնությունը:

Կախվածության հակադարձման սկզբունք (DIP) — SOLID-ի հինգ սկզբունքներից մեկը, որը ասում է, որ.

  • Բարձր մակարդակի մոդուլները չպետք է կախված լինեն ցածր մակարդակի մոդուլներից։ Երկուսն էլ պետք է կախված լինեն աբստրակցիաներից։
  • Աբստրակցիաները չպետք է կախված լինեն մանրամասներից։ Մանրամասները պետք է կախված լինեն աբստրակցիաներից։

Պարզ ասած, DIP ուղղված է բաղադրիչների միջև կապի նվազեցմանը աբստրակցիաների (օրինակ, ինտերֆեյսների) օգտագործմամբ:

Նրանց միջև կապը: DI — դա DIP իրականացնելու միջոց է։ Օգտագործելով DI, մենք փոխանցում ենք կախվածությունները կոնստրուկտորով կամ սեթերներով, ինչը թույլ է տալիս մոդուլներին կախված լինել աբստրակցիաներից, ոչ թե կոնկրետ իրականացումներից:

Swift-ի օրինակ՝

protocol NetworkService {
    func fetchData()
}

class APIService: NetworkService {
    func fetchData() {
        print("API-ից տվյալների ստացում")
    }
}

class ViewModel {
    private let networkService: NetworkService

    // Կախվածության ներդրում կոնստրուկտորով
    init(networkService: NetworkService) {
        self.networkService = networkService
    }

    func load() {
        networkService.fetchData()
    }
}

let apiService = APIService()
let viewModel = ViewModel(networkService: apiService)
viewModel.load()

Այստեղ, ViewModel-ը կախված է աբստրակցիցիա NetworkService (DIP), իսկ կոնկրետ իրականացումը փոխանցվում է դուրսից (DI):