Sobes.tech
Intern

Kāda ir atšķirība starp Dependency Injection un Dependency Inversion?

sobes.tech AI

Atbilde no AI

Atkarības ievade (Dependency Injection, DI) un Atkarību inversija (Dependency Inversion, DIP) ir saistīti, bet dažādi jēdzieni programmatūras projektēšanas jomā.

  • Atkarību inversijas princips (DIP) — viens no pieciem SOLID principiem. Tas saka, ka:

    1. Augstākā līmeņa moduļi nedrīkst būt atkarīgi no zemākā līmeņa moduļiem. Abi jābūt atkarīgiem no abstrakcijām.
    2. Abstrakcijas nedrīkst būt atkarīgas no detaļām. Detaļas jābūt atkarīgām no abstrakcijām.

    Šis princips ir vērsts uz saistības samazināšanu un arhitektūras elastības palielināšanu.

  • Atkarību ievade (DI) — ir modelis (metode) atkarību inversijas īstenošanai. DI nozīmē, ka objekta atkarības tiek nodotas no ārpuses (piemēram, caur konstruktoru, setter vai interfeisu), nevis tiek radītas iekšēji.

C++ piemērs DI:

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("Programma sākās");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // atkarību ievade
    app.Run();
}

Īsumā: DIP ir projektēšanas princips, bet DI ir veids, kā to īstenot.