Junior — Middle
შეგიძლიათ ახსნათ დამოკიდებულების ინვერსიის პრინციპი და როგორ გამოიყენება იგი პროგრამული სისტემების დიზაინში?
sobes.tech AI
პასუხი AI-სგან
Ավելիքի կախվածության հակառակը (Dependency Inversion Principle, DIP) SOLID հինգ սկզբունքներից մեկն է և ասում է, որ.
- Բարձր մակարդակի մոդուլները չպետք է կախված լինեն ցածր մակարդակի մոդուլներից: Երկուսն էլ պետք է կախված լինեն աբստրակցիաներից:
- Աբստրակցիաները չպետք է կախված լինեն մանրամասներից: Մանրամասները պետք է կախված լինեն աբստրակցիաներից:
Սա նշանակում է, որ փոխարենը, որ ուղղակիորեն ստեղծենք և օգտագործենք կոնկրետ դասեր կամ մոդուլներ, մենք աշխատում ենք ինտերֆեյսների կամ աբստրակտ դասերի միջոցով: Սա մեծացնում է ճկունությունը և հեշտացնում է կոդի թեստավորումը և սպասարկումը:
Սա կիրառվում է ծրագրային համակարգերի նախագծման ժամանակ՝
- Կոմպոնենտները կախված են ինտերֆեյսներից, ոչ թե կոնկրետ իրագործումներից:
- Իրագործումները կարող են փոխվել առանց այն կոդը փոխելու, որը դրանք օգտագործում է:
- Հնարավոր է ներդնել կախվածությունները կոնստրուկտորների, սեթերների կամ գործարանների միջոցով (Dependency Injection):
Node.js-ի օրինակ՝
// Աբստրակցիա
class Logger {
log(message) {
throw new Error('Չիրականացված');
}
}
// Կոնկրետ իրագործում
class ConsoleLogger extends Logger {
log(message) {
console.log(message);
}
}
// Կլաս, որը կախված է աբստրակցիայից
class UserService {
constructor(logger) {
this.logger = logger;
}
createUser(name) {
// օգտագործողի ստեղծման տրամաբանություն
this.logger.log(`Օգտագործող ${name} ստեղծված`);
}
}
const logger = new ConsoleLogger();
const userService = new UserService(logger);
userService.createUser('Alice');
Այստեղ, UserService-ը կախված է աբստրակցությունից Logger, ոչ թե կոնկրետ ConsoleLogger-ից: Սա թույլ է տալիս հեշտությամբ փոխարինել լոգգերին այլով, օրինակ՝ ֆայլում գրանցելու համար, առանց UserService-ը փոխելու: