Sobes.tech
Intern

Aký je rozdiel medzi Dependency Injection a Dependency Inversion?

sobes.tech AI

Odpoveď od AI

Vstrekovanie závislostí (Dependency Injection, DI) a Invertovanie závislostí (Dependency Inversion, DIP) sú súvisiace, ale odlišné koncepty v oblasti návrhu softvéru.

  • Princíp invertovania závislostí (DIP) — jeden z piatich princípov SOLID. Hovorí, že:

    1. Moduly vyššej úrovne by nemali závisieť od modulov nižšej úrovne. Oba by mali závisieť od abstrakcií.
    2. Abstrakcie by nemali závisieť od detailov. Detaily by mali závisieť od abstrakcií.

    Tento princíp je zameraný na zníženie prepojenia a zvýšenie flexibility architektúry.

  • Vstrekovanie závislostí (DI) — je vzor (šablóna) na implementáciu invertovania závislostí. DI znamená, že závislosti objektu sú mu odovzdávané zvonku (napríklad cez konštruktor, setter alebo rozhranie), nie sú vytvárané vo vnútri objektu.

Príklad DI v 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("Aplikácia bola spustená");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // injekcia závislosti
    app.Run();
}

Stručne: DIP je princíp návrhu, a DI je spôsob jeho implementácie.