Sobes.tech
Intern

Dependency Injection və Dependency Inversion arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Asılılıq İnkişafı (Dependency Injection, DI) və Asılılıq İnversiyası (Dependency Inversion, DIP) proqram təminatı dizayn sahəsində əlaqəli, lakin fərqli anlayışlardır.

  • Asılılıq İnversiyası Prinsipi (DIP) — SOLID prinsiplərindən biridir. Bu prinsip deyir ki:

    1. Yuxarı səviyyəli modullar aşağı səviyyəli modullara bağlı olmamalıdır. Hər ikisi abstraksiyalara bağlı olmalıdır.
    2. Abstraksiyalar detallara bağlı olmamalıdır. Detallar abstraksiyalara bağlı olmalıdır.

    Bu prinsip arxitekturanın əlaqəliliyini azaltmağa və çevikliyini artırmağa yönəlib.

  • Asılılıq İnkişafı (DI) — asılılıqları inversiya etmək üçün istifadə olunan nümunə (metod). DI o deməkdir ki, obyektin asılılıqları xaricdən (məsələn, konstruktor, setter və ya interfeys vasitəsilə) ona ötürülür, və obyekt daxilində yaradılmır.

C++-da DI nümunəsi:

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("Tətbiq başladı");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // asılılıq injeksiyası
    app.Run();
}

Qısaca: DIP — dizayn prinsipi, və DI — onun həyata keçirilmə üsuludur.