Ի՞նչ է ինվերսիայի կառավարման (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-ի մեջ։