Sobes.tech
Middle

Баскарууну тескерисинче кылуу (IoC) жана көзкарандычтыкты киргизүү ортосунда кандай айырма бар?

sobes.tech AI

AIден жооп

Баскаруу инверсиясы (IoC) — бул программаны долбоорлоонун жалпы принциби, ага ылайык, программаны башкаруу агымы өзгөрөт: аны так башкаруу ордуна, компонент сырттан келген фреймворк же контейнер тарабынан башкарылат.

Тийиштүү көзкарандычылыктарды киргизүү (DI) — бул IoC принципин ишке ашыруучу конкреттүү паттерн. Ал көзкарандычылыктарды (азыркы компонентке көзкаранды болгон объекттерди) тыштан берүү аркылуу ишке ашырылат, ал эми компонент аларды өзү түзбөйт же издебейт.

Ошентип, DI — бул IoCке жетүүнүн ыкмасы.

Негизги айырмачылыктар:

  • IoC — принцип/түсүнүк.
  • DI — паттерн/ишке ашыруу.
  • IoC ар кандай жолдор менен ишке ашырылышы мүмкүн (мисалы, фабричный метод, сервис локатору), ал эми DI — алардын бири.
  • IoC жоопкерчиликти объекттерди түзүү жана байланыштыруу боюнча компоненттен фреймворкка/контейнерге которот.
  • DI бул которууну ишке ашырат, көзкарандычылыктарды конструктор, сеттер же интерфейс аркылуу өткөрүү менен.

DI мисалы (конструктор аркылуу):

// Serviceке көзкаранды болгон класс
public class Client {
    private final Service service;

    // Конструктор көзкарандыны кабыл алат (Service)
    public Client(Service service) {
        this.service = service;
    }

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

// көзкарандынын интерфейси
public interface Service {
    void execute();
}

// көзкарандынын конкреттүү ишке ашыруу
public class ServiceImpl implements Service {
    @Override
    public void execute() {
        System.out.println("Кызматты аткаруу...");
    }
}

// "Киргизүү" жооптуу класс
public class AppConfig {
    public static void main(String[] args) {
        Service myService = new ServiceImpl(); // көзкарандыны түзүү
        Client client = new Client(myService); // көзкарандыны конструктор аркылуу киргизүү
        client.doSomething();
    }
}

Бул мисалда Client классы ServiceImpl түзбөйт. Анын ордуна, ServiceImpl башка жакта (AppConfig) түзүлүп, Clientке анын конструктору аркылуу өткөрүлөт. Бул IoC принципин ишке ашырат, анткени Service түзүү жана байланыштыруу башкаруу Clientте эмес, сыртта болот.