Intern
Aký je rozdiel medzi Dependency Injection a Dependency Inversion?
sobes.tech AI
Odpoveď od AI
Vstrekovanie závislostí (Dependency Injection, DI) a Invertovanie závislostí (Dependency Inversion, DIP) sú súvisiace, ale odlišné koncepty v oblasti návrhu softvéru.
-
Princíp invertovania závislostí (DIP) — jeden z piatich princípov SOLID. Hovorí, že:
- Moduly vyššej úrovne by nemali závisieť od modulov nižšej úrovne. Oba by mali závisieť od abstrakcií.
- Abstrakcie by nemali závisieť od detailov. Detaily by mali závisieť od abstrakcií.
Tento princíp je zameraný na zníženie prepojenia a zvýšenie flexibility architektúry.
-
Vstrekovanie závislostí (DI) — je vzor (šablóna) na implementáciu invertovania závislostí. DI znamená, že závislosti objektu sú mu odovzdávané zvonku (napríklad cez konštruktor, setter alebo rozhranie), nie sú vytvárané vo vnútri objektu.
Príklad DI v 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("Aplikácia bola spustená");
}
};
int main() {
ConsoleLogger logger;
Application app(logger); // injekcia závislosti
app.Run();
}
Stručne: DIP je princíp návrhu, a DI je spôsob jeho implementácie.