Sobes.tech
Intern

Mi a különbség a Dependency Injection és a Dependency Inversion között?

sobes.tech MI

Válasz az MI-től

A Függőségbeviteli (Dependency Injection, DI) és a Függőségfordítás (Dependency Inversion, DIP) fogalmak kapcsolódnak, de különbözőek a szoftvertervezés területén.

  • A Függőségfordítás (DIP) — az SOLID öt alapelv egyik. Azt mondja, hogy:

    1. A magas szintű moduloknak nem szabad alacsony szintű modulokra támaszkodniuk. Mindkettőnek az absztrakciókra kell támaszkodnia.
    2. Az absztrakciók nem függhetnek a részletektől. A részleteknek az absztrakcióktól kell függniük.

    Ez az elv a kötöttség csökkentésére és az architektúra rugalmasságának növelésére irányul.

  • A Függőségbeviteli (DI) — egy minta (módszer) a függőségfordítás megvalósítására. A DI azt jelenti, hogy egy objektum függőségeit kívülről adjuk át (pl. konstruktor, setter vagy interfész segítségével), nem pedig belül hozzuk létre.

Példa DI-re C++-ban:

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("Alkalmazás indult");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // függőségbeviteli injekció
    app.Run();
}

Összefoglalva: A DIP egy tervezési elv, a DI pedig ennek megvalósítási módja.