Sobes.tech
Intern

Mis vahe on Dependency Injection ja Dependency Inversion vahel?

sobes.tech AI

Vastus AI-lt

Sõltuvuste sisestamine (Dependency Injection, DI) ja sõltuvuste pööramine (Dependency Inversion, DIP) on seotud, kuid erinevad kontseptsioonid tarkvaraarhitektuuri valdkonnas.

  • Sõltuvuste pööramise põhimõte (DIP) — üks viiest SOLID põhimõttest. See ütleb, et:

    1. Kõrgema taseme moodulid ei tohi sõltuda madalama taseme moodulitest. Mõlemad peaksid sõltuma abstraktsioonidest.
    2. Abstraktsioonid ei tohi sõltuda üksikdetailidest. Detailid peavad sõltuma abstraktsioonidest.

    See põhimõte on suunatud sidususe vähendamisele ja arhitektuuri paindlikkuse suurendamisele.

  • Sõltuvuste sisestamine (DI) — on muster (meetod) sõltuvuste pööramise teostamiseks. DI tähendab, et objekti sõltuvused antakse talle väljastpoolt (näiteks konstruktor, setter või liides), mitte ei loo neid objekti sees.

Näide DI-st C++-s:

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("Rakendus käivitus");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // sõltuvuste sisestamine
    app.Run();
}

Kokkuvõtteks: DIP on disainiprintsiip, DI aga selle rakendamise viis.