Sobes.tech
Back to questions
Intern
14

В чём отличие Dependency Injection от Dependency Inversion?

Companies where asked
Adapty

Answer from AI

sobes.tech AI

Dependency Injection (внедрение зависимостей) и Dependency Inversion (инверсия зависимостей) — это связанные, но разные концепции в области проектирования ПО.

  • Dependency Inversion Principle (DIP) — один из пяти принципов SOLID. Он говорит, что:

    1. Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
    2. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

    Это принцип, направленный на уменьшение связности и повышение гибкости архитектуры.

  • Dependency Injection (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("App started");
    }
};

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

Итого: DIP — это принцип проектирования, а DI — способ его реализации.