Intern
Mi a különbség a Dependency Injection és a Dependency Inversion között?
sobes.tech MI
Válasz az MI-től
A Függőségbeviteli (Dependency Injection, DI) és a Függőségfordítás (Dependency Inversion, DIP) fogalmak kapcsolódnak, de különbözőek a szoftvertervezés területén.
-
A Függőségfordítás (DIP) — az SOLID öt alapelv egyik. Azt mondja, hogy:
- A magas szintű moduloknak nem szabad alacsony szintű modulokra támaszkodniuk. Mindkettőnek az absztrakciókra kell támaszkodnia.
- Az absztrakciók nem függhetnek a részletektől. A részleteknek az absztrakcióktól kell függniük.
Ez az elv a kötöttség csökkentésére és az architektúra rugalmasságának növelésére irányul.
-
A Függőségbeviteli (DI) — egy minta (módszer) a függőségfordítás megvalósítására. A DI azt jelenti, hogy egy objektum függőségeit kívülről adjuk át (pl. konstruktor, setter vagy interfész segítségével), nem pedig belül hozzuk létre.
Példa DI-re C++-ban:
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("Alkalmazás indult");
}
};
int main() {
ConsoleLogger logger;
Application app(logger); // függőségbeviteli injekció
app.Run();
}
Összefoglalva: A DIP egy tervezési elv, a DI pedig ennek megvalósítási módja.