Sobes.tech
Intern

Jaka jest różnica między Dependency Injection a Dependency Inversion?

sobes.tech AI

Odpowiedź od AI

Wstrzykiwanie zależności (Dependency Injection, DI) i odwrócenie zależności (Dependency Inversion, DIP) to powiązane, ale różne koncepcje w dziedzinie projektowania oprogramowania.

  • Zasada odwrócenia zależności (DIP) — jedna z pięciu zasad SOLID. Mówi, że:

    1. Moduły wysokiego poziomu nie powinny zależeć od modułów niskiego poziomu. Oba powinny zależeć od abstrakcji.
    2. Abstrakcje nie powinny zależeć od szczegółów. Szczegóły powinny zależeć od abstrakcji.

    Zasada ta ma na celu zmniejszenie powiązań i zwiększenie elastyczności architektury.

  • Wstrzykiwanie zależności (DI) — to wzorzec (metoda) realizacji odwrócenia zależności. DI oznacza, że zależności obiektu są mu przekazywane z zewnątrz (np. przez konstruktor, setter lub interfejs), a nie tworzone wewnątrz obiektu.

Przykład DI w 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("Uruchomiono aplikację");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // wstrzykiwanie zależności
    app.Run();
}

Podsumowując: DIP to zasada projektowania, a DI to sposób jej realizacji.