Sobes.tech
Junior — Middle

Тәуелділіктерді кері айналдыру принципін түсіндіріп берсеңіз және ол бағдарламалық жүйелерді жобалауда қалай қолданылады?

sobes.tech AI

AIден жооп

Bağlılıqın Tersiyalash Prinsipi (Dependency Inversion Principle, DIP) SOLID prinsiplərindən biridir və deyir ki:

  • Yüksək səviyyəli modullar aşağı səviyyəli modullara bağlı olmamalıdır. Hər ikisi abstraksiyalara bağlı olmalıdır.
  • Abstraksiyalar detallara bağlı olmamalıdır. Detallar abstraksiyalara bağlı olmalıdır.

Bu, o deməkdir ki, biz birbaşa konkret sinflər və ya modulları yaratmaq və istifadə etmək yerinə, interfeysler və ya abstrakt sinflər vasitəsilə işləyirik. Bu, elastikliyi artırır və kodun test edilməsini və dəstəyini asanlaşdırır.

Proqram sistemlərinin dizaynında, bu aşağıdakı kimi tətbiq olunur:

  • Komponentlər konkret implementasiyalardan çox, interfeysler ilə bağlıdır.
  • Implementasiyalar, onları istifadə edən kodu dəyişdirmədən dəyişdirilə bilər.
  • Bu, bağımlılıqları konstruktorlar, setterlər və ya fabriklər (Dependency Injection) vasitəsilə inject etməyə imkan verir.

Node.js nümunəsi:

// Abstraksiya
class Logger {
  log(message) {
    throw new Error('Nəzarət olunmayıb');
  }
}

// Konkret implementasiya
class ConsoleLogger extends Logger {
  log(message) {
    console.log(message);
  }
}

// Abstraksiyaya bağlı sinif
class UserService {
  constructor(logger) {
    this.logger = logger;
  }

  createUser(name) {
    // istifadəçi yaradılması loqikası
    this.logger.log(`İstifadəçi ${name} yaradıldı`);
  }
}

const logger = new ConsoleLogger();
const userService = new UserService(logger);
userService.createUser('Alice');

Burada, UserService, Logger abstraksiyasına bağlıdır, konkret ConsoleLogger-ə yox. Bu, loggeri asanlıqla başqa birinə, məsələn, fayla qeyd etmək üçün dəyişdirməyə imkan verir, UserService-i dəyişdirmədən.