Sobes.tech
Intern

Ի՞նչ է Dependency Injection-ը և Dependency Inversion-ը տարբերությունը։

sobes.tech AI

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

Անհրաժեշտության ներմուծում (Dependency Injection, DI) և Անհրաժեշտության հակադրություն (Dependency Inversion, DIP) հասկացությունները կապված են, բայց տարբեր են ծրագրային ապահովման նախագծման ոլորտում:

  • Անհրաժեշտության հակադրության սկզբունք (DIP) — SOLID հինգ սկզբունքներից մեկը։ Այն ասում է, որ.

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

    Այս սկզբունքը նպատակ ունի նվազեցնել կապակցվածությունը և բարձրացնել ճկունությունը։

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

C++-ում DI-ի օրինակ:

class ILogger {
public:
    virtual void Log(const std::string& message) = 0;
};

class ConsoleLogger : public ILogger {
public:
    void Log(const std::string& message) override {
        std::cout << message << std::endl;
    }
};

class Application {
    ILogger& logger;
public:
    Application(ILogger& logger) : logger(logger) {}
    void Run() {
        logger.Log("Հայտը սկսվեց");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // կախվածության ներմուծում
    app.Run();
}

Ամփոփում՝ DIP-ը նախագծման սկզբունք է, իսկ DI-ն դրա իրականացման միջոցն է։