İdarəetmənin tərs çevrilməsi (IoC) və asılılıqların injeksiyası arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
İnversiya nəzarəti (IoC) ümumi dizayn prinsipidir və ona görə proqramın nəzarət axını dəyişir: açıq şəkildə asılılıqları və onların çağırılma məntiqini idarə etmək əvəzinə, komponent xarici çərçivəyə və ya konteynerə güvənir ki, bu da bu axını idarə edir.
Asılı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 (asılı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ığı enjekte 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 (enjekte edilir). Bu, IoC prinsipini həyata keçirir, çünki idarəetmə Service-in yaradılması və əlaqələndirilməsi tərsinə çevrilmişdir — bu, Client-də deyil.