Sobes.tech
Junior — Middle

Կարող եք բացատրել կախվածությունների հակադարձման սկզբունքի և կախվածությունների ներմուծման տարբերությունները:

sobes.tech AI

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

Անհրաժեշտությունների հակադարձում (Principle of Dependency Inversion, DIP) — դա SOLID սկզբունքներից մեկն է, որը ասում է, որ՝

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

Սա նախագծման սկզբունք է, որը նպատակ ունի նվազեցնել կապակցվածությունը և բարձրացնել կոդի ճկունությունը։

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

Օրինակ՝

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Ծառայության աշխատանք") }
}

class Client {
    let service: Service

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

    func execute() {
        service.doSomething()
    }
}

let service = RealService()
let client = Client(service: service)
client.execute()

Այստեղ DIP-ը գաղափար է, որ Client-ը կախված է աբստրակցիա Service-ից, ոչ թե կոնկրետ իրականացմանից RealService։ DI-ն այն միջոցն է, որով կոնկրետ իրականացումը փոխանցվում է Client-ին արտաքինից։

Ամփոփում՝

  • DIP — նախագծման սկզբունք։
  • DI — այս սկզբունքը իրականացնելու միջոց։