Sobes.tech
Intern

Koja je razlika između Dependency Injection i Dependency Inversion?

sobes.tech АИ

Одговор од АИ

Ubacivanje zavisnosti (Dependency Injection, DI) i Inverzija zavisnosti (Dependency Inversion, DIP) su povezani, ali različiti koncepti u oblasti dizajna softvera.

  • Princip inverzije zavisnosti (DIP) — jedan od pet principa SOLID. On kaže da:

    1. Moduli višeg nivoa ne bi trebalo da zavise od modula nižeg nivoa. Oba treba da zavise od apstrakcija.
    2. Apstrakcije ne bi trebalo da zavise od detalja. Detalji treba da zavise od apstrakcija.

    Ovaj princip je usmeren na smanjenje povezanosti i povećanje fleksibilnosti arhitekture.

  • Ubacivanje zavisnosti (DI) — je obrazac (šablon) za implementaciju inverzije zavisnosti. DI znači da se zavisnosti objekta prosleđuju spolja (npr. putem konstruktora, settera ili interfejsa), a ne kreiraju unutar objekta.

Primer DI u 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("Aplikacija je pokrenuta");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // ubacivanje zavisnosti
    app.Run();
}

Ukratko: DIP je princip dizajna, a DI je način njegove implementacije.