Sobes.tech
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.