Sobes.tech
Intern

Kuo skiriasi Dependency Injection nuo Dependency Inversion?

sobes.tech AI

Atsakymas iš AI

Priklausomybių įvedimas (Dependency Injection, DI) ir Priklausomybių inversija (Dependency Inversion, DIP) yra susiję, bet skirtingi konceptai programinės įrangos projektavimo srityje.

  • Priklausomybių inversijos principas (DIP) — vienas iš penkių SOLID principų. Jis sako, kad:

    1. Aukšto lygio moduliai neturėtų priklausyti nuo žemo lygio modulių. Abu turėtų priklausyti nuo abstrakcijų.
    2. Abstrakcijos neturėtų priklausyti nuo detalių. Detalės turėtų priklausyti nuo abstrakcijų.

    Šis principas siekia sumažinti sujungimą ir padidinti architektūros lankstumą.

  • Priklausomybių įvedimas (DI) — yra modelis (metodas) įgyvendinti priklausomybių inversiją. DI reiškia, kad objekto priklausomybės jam perduodamos iš išorės (pavyzdžiui, per konstruktorių, nustatymo metodą ar sąsają), o ne kuriamos viduje.

Pavyzdys DI C++:

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("Programos paleidimas");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // priklausomybių įvedimas
    app.Run();
}

Trumpai: DIP yra projektavimo principas, o DI — jo įgyvendinimo būdas.