Sobes.tech
Intern

Qual é a diferença entre Dependency Injection e Dependency Inversion?

sobes.tech IA

Resposta da IA

A Injeção de Dependências (Dependency Injection, DI) e a Inversão de Dependências (Dependency Inversion, DIP) são conceitos relacionados, mas diferentes, na área do design de software.

  • Princípio da Inversão de Dependências (DIP) — um dos cinco princípios SOLID. Ele afirma que:

    1. Os módulos de nível superior não devem depender dos módulos de nível inferior. Ambos devem depender de abstrações.
    2. As abstrações não devem depender dos detalhes. Os detalhes devem depender das abstrações.

    Este princípio visa reduzir o acoplamento e aumentar a flexibilidade da arquitetura.

  • Injeção de Dependências (DI) — é um padrão (método) para implementar a inversão de dependências. DI significa que as dependências de um objeto são passadas a ele de fora (por exemplo, através do construtor, de um setter ou de uma interface), em vez de serem criadas dentro do objeto.

Exemplo de DI em 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("Aplicação iniciada");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // injeção de dependência
    app.Run();
}

Resumindo: DIP é um princípio de design, e DI é uma maneira de implementá-lo.