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. Он говорит, что:
- Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Это принцип, направленный на уменьшение связности и повышение гибкости архитектуры.
-
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 — способ его реализации.