Sobes.tech
Intern

Фарқи байни Dependency Injection ва Dependency Inversion чист?

sobes.tech AI

Ҷавоб аз AI

Тамаълуи вобастагиҳо (Dependency Injection, DI) ва Инверсияи вобастагиҳо (Dependency Inversion, DIP) мавзӯъҳои вобаста, аммо гуногун дар соҳаи тарҳи нармафзор мебошанд.

  • Принсипи инверсияи вобастагиҳо (DIP) — яке аз панҷ принсипи SOLID. Он мегӯяд, ки:

    1. Модулҳои сатҳи баланд набояд аз модулҳои сатҳи пасттар вобаста бошанд. Ҳарду бояд аз абстраксияҳо вобаста бошанд.
    2. Абстраксияҳо набояд аз тафсилотҳо вобаста бошанд. Тафсилотҳо бояд аз абстраксияҳо вобаста бошанд.

    Ин принсип барои кам кардани пайвастагӣ ва баланд бардоштани чандирии меъморӣ равона шудааст.

  • Вобастагиҳо дарунсохт (DI) — намуна (усул) барои иҷрои инверсияи вобастагиҳо. DI маъно дорад, ки вобастагиҳо ба объект аз берун (масалан, тавассути конструктор, сеттер ё интерфейс) дода мешаванд, на дар дохили объект эҷод мешаванд.

Масалан, 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 роҳи иҷрои он мебошад.