Sobes.tech
Intern

Ποια είναι η διαφορά μεταξύ Dependency Injection και Dependency Inversion;

sobes.tech AI

Απάντηση από AI

Η Εισαγωγή Εξαρτήσεων (Dependency Injection, DI) και η Αντιστροφή Εξαρτήσεων (Dependency Inversion, DIP) είναι σχετικές, αλλά διαφορετικές έννοιες στον τομέα του σχεδιασμού λογισμικού.

  • Αρχή Αντιστροφής Εξαρτήσεων (DIP) — μία από τις πέντε αρχές SOLID. Λέει ότι:

    1. Τα modules υψηλού επιπέδου δεν πρέπει να εξαρτώνται από τα modules χαμηλού επιπέδου. Και τα δύο πρέπει να εξαρτώνται από αφαιρέσεις.
    2. Οι αφαιρέσεις δεν πρέπει να εξαρτώνται από λεπτομέρειες. Οι λεπτομέρειες πρέπει να εξαρτώνται από τις αφαιρέσεις.

    Αυτή η αρχή στοχεύει στη μείωση της συσχέτισης και στην αύξηση της ευελιξίας της αρχιτεκτονικής.

  • Εισαγωγή Εξαρτήσεων (DI) — είναι ένα μοτίβο (πρότυπο) για την υλοποίηση της αντιστροφής των εξαρτήσεων. Το DI σημαίνει ότι οι εξαρτήσεις ενός αντικειμένου περνιούνται από έξω (π.χ., μέσω του κατασκευαστή, ενός setter ή μιας διεπαφής), αντί να δημιουργούνται μέσα στο αντικείμενο.

Παράδειγμα 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("Εφαρμογή ξεκίνησε");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // εισαγωγή εξαρτήσεων
    app.Run();
}

Συνοπτικά: Το DIP είναι μια αρχή σχεδιασμού, και το DI είναι ένας τρόπος υλοποίησής της.