Sobes.tech
Middle

Boshqaruvni teskari qilish (IoC) va bog'liqliklarni injektsiya qilish o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Kontrolün Ters Çevrilmesi (IoC), proqramın nəzarət axınının dəyişdiyi ümumi dizayn prinsipidir: bağımlılıqları və onların çağırılma məntiqini açıq şəkildə idarə etmək əvəzinə, komponent xarici çərçivəyə və ya konteynerə güvənir ki, bu da bu axını idarə edir.

Bağımlılıqların Enjeksiyası (DI), IoC prinsipini həyata keçirən xüsusi nümunələrdən biridir. Bu, cari komponentdən asılı olan obyektlərin (bağımlılıqların) xaricdən komponentə ötürülməsidir, komponent onları özü yaratmaq və ya axtarmaq yerinə.

Beləliklə, DI, IoC-yə nail olmağın bir yoludur.

Əsas fərqlər:

  • IoC — prinsip/konsepsiya.
  • DI — nümunə/həyata keçirmə.
  • IoC müxtəlif üsullarla həyata keçirilə bilər (məsələn, fabrik metodu, xidmət axtarıcı), DI isə bu üsullardan biridir.
  • IoC, obyektlərin yaradılması və əlaqələndirilməsinin məsuliyyətini komponentdən çərçivəyə/konteynerə köçürür.
  • DI, bu köçürməni, bağımlılıqları konstruktor, setter və ya interfeys vasitəsilə ötürməklə həyata keçirir.

DI nümunəsi (konstruktor):

// Service-ə bağlı sinif
public class Client {
    private final Service service;

    // Konstruktor bağımlılığı (Service) qəbul edir
    public Client(Service service) {
        this.service = service;
    }

    public void doSomething() {
        service.execute();
    }
}

// Bağımlılıq interfeysi
public interface Service {
    void execute();
}

// Bağımlılığın konkret tətbiqi
public class ServiceImpl implements Service {
    @Override
    public void execute() {
        System.out.println("Xidmət icra olunur...");
    }
}

// "İnjeksiyon" üçün məsul sinif
public class AppConfig {
    public static void main(String[] args) {
        Service myService = new ServiceImpl(); // Bağımlılığı yarat
        Client client = new Client(myService); // Konstruktor vasitəsilə bağımlılığı enjeksiyon et
        client.doSomething();
    }
}

Bu nümunədə, Client sinfi birbaşa ServiceImpl yaratmır. Əvəzində, ServiceImpl başqa yerdə (AppConfig) yaradılır və Client-ə onun konstruktoru vasitəsilə ötürülür (enjeksiyon). Bu, IoC prinsipini həyata keçirir, çünki Service-in yaradılması və əlaqələndirilməsi idarəsi tərsinə çevrilmişdir — bu, Client-də deyil.