Sobes.tech
Intern

Каква е разликата между Dependency Injection и Dependency Inversion?

sobes.tech AI

Отговор от AI

Внедряване на зависимости (Dependency Injection, DI) и Инверсия на зависимостите (Dependency Inversion, DIP) са свързани, но различни концепции в областта на софтуерното проектиране.

  • Принцип на инверсия на зависимостите (DIP) — един от петте принципа SOLID. Той гласи, че:

    1. Модулите от висок ниво не трябва да зависят от модулите от ниско ниво. И двата трябва да зависят от абстракции.
    2. Абстракциите не трябва да зависят от детайлите. Детайлите трябва да зависят от абстракциите.

    Този принцип е насочен към намаляване на свързаността и увеличаване на гъвкавостта на архитектурата.

  • Внедряване на зависимости (DI) — е шаблон (модел) за реализиране на инверсията на зависимостите. DI означава, че зависимостите на обекта се предават отвън (например чрез конструктор, сеттер или интерфейс), а не се създават вътре в обекта.

Пример за DI на 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("Приложението стартира");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // внедряване на зависимост
    app.Run();
}

Обобщено: DIP е принцип за проектиране, а DI е начин за неговата реализация.