Sobes.tech
Intern

რა არის Dependency Injection და Dependency Inversion შორის განსხვავება?

sobes.tech AI

პასუხი AI-სგან

დამოკიდებულების ინექცია (Dependency Injection, DI) და დამოკიდებულების ინვერსია (Dependency Inversion, DIP) დაკავშირებული, მაგრამ სხვადასხვა კონცეფციებია პროგრამული უზრუნველყოფის დიზაინში.

  • დამოკიდებულების ინვერსიის პრინციპი (DIP) — SOLID ხუთი პრინციპიდან ერთ-ერთი. იგი ამბობს, რომ:

    1. მაღალ დონეზე მოდულები არ უნდა იყოს დამოკიდებული დაბალ დონეზე მოდულებზე. ორივე უნდა იყოს დამოკიდებული აბსტრაქციებზე.
    2. აბსტრაქციები არ უნდა იყოს დამოკიდებული დეტალებზე. დეტალები უნდა იყოს დამოკიდებული აბსტრაქციებზე.

    ეს პრინციპი მიზნად ისახავს კავშირის შემცირებას და არქიტექტურის მოქნილობის გაზრდას.

  • დამოკიდებულების ინექცია (DI) — არის ნიმუში (მეთოდი) დამოკიდებულების ინვერსიის განხორციელებისთვის. DI ნიშნავს, რომ ობიექტის დამოკიდებულებები მას გარედან გადაეცემა (მაგალითად, კონსტრუქტორით, სეტტერით ან ინტერფეისით), და არა შიგნიდან იქმნება.

C++-ში 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("აპლიკაცია დაიწყო");
    }
};

int main() {
    ConsoleLogger logger;
    Application app(logger); // დამოკიდებულების ინექცია
    app.Run();
}

საერთო ჯამში: DIP — დიზაინის პრინციპია, ხოლო DI — მისი განხორციელების მეთოდი.