Junior — Middle
Bog'liq dasturiy tizimlarni loyihalashda bog'liqliklarni inversiya qilish printsipi nima va u qanday qo'llaniladi?
sobes.tech AI
AIdan javob
Bağlılıq Tersiyalash Prinsipi (Dependency Inversion Principle, DIP) SOLID prinsiplari ichidan biri bo‘lib, quyidagilarni bildiradi:
- Yuqori darajadagi modullar past darajadagi modullarga bog‘liq bo‘lmasligi kerak. Ikkalasi ham abstraktsiyalarga bog‘liq bo‘lishi kerak.
- Abstraktsiyalar detallariga bog‘liq bo‘lmasligi kerak. Detallar abstraktsiyalarga bog‘liq bo‘lishi kerak.
Bu shuni anglatadiki, biz to‘g‘ridan-to‘g‘ri aniq sinflar yoki modullarni yaratish va ishlatish o‘rniga, interfeyslar yoki abstrakt sinflar orqali ishlaymiz. Bu kodning moslashuvchanligini oshiradi va test qilish va qo‘llab-quvvatlashni osonlashtiradi.
Dasturiy tizimlarni loyihalashda, bu quyidagicha qo‘llaniladi:
- Komponentlar aniq implementatsiyalardan ko‘ra, interfeyslar bilan bog‘liq.
- Ularni ishlatadigan kodni o‘zgartirmasdan, implementatsiyalarni o‘zgartirish mumkin.
- Bu, bog‘liqliklarni konstruktorlar, setterlar yoki fabrikalar (Dependency Injection) orqali in‘ektsiya qilish imkonini beradi.
Node.js misoli:
// Abstraktsiya
class Logger {
log(message) {
throw new Error('Amalga oshirilmagan');
}
}
// Aniq implementatsiya
class ConsoleLogger extends Logger {
log(message) {
console.log(message);
}
}
// Abstraktsiyaga bog‘liq sinf
class UserService {
constructor(logger) {
this.logger = logger;
}
createUser(name) {
// foydalanuvchi yaratish logikasi
this.logger.log(`Foydalanuvchi ${name} yaratildi`);
}
}
const logger = new ConsoleLogger();
const userService = new UserService(logger);
userService.createUser('Alice');
Bu yerda, UserService, aniq ConsoleLogger emas, balki Logger abstraktsiyasiga bog‘liq. Bu, loggerni osongina boshqa turga almashtirish imkonini beradi, masalan, faylga yozish uchun, UserService ni o‘zgartirmasdan.