Sobes.tech
Junior — Middle

Asılılıqların tərs çevrilməsi prinsipini və bunun proqram təminatı sistemlərinin dizaynında necə tətbiq olunduğunu izah edə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Asılılıqın Tərs Prinsipi (Dependency Inversion Principle, DIP) SOLID prinsiplərindən biridir və deyir ki:

  • Yuxarı 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ə, interfeyslər 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, interfeyslərdən ası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('İcra 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.