Sobes.tech
Junior — Middle

Оё метавонед принсипи ифодасозии вобастаиро шарҳ диҳед ва чӣ гуна дар тарҳрезии системаҳои нармафзории истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Принципи ифоданӣи такон (Dependency Inversion Principle, DIP) аз панҷ принсипи SOLID аст ва мегӯяд, ки:

  • Модулҳои сатҳи баланд набояд аз модулҳои сатҳи паст такон ёбанд. Ҳарду бояд аз абстраксияҳо такон ёбанд.
  • Абстраксияҳо набояд аз тафсилотҳо такон ёбанд. Тафсилотҳо бояд аз абстраксияҳо такон ёбанд.

Ин маъно дорад, ки ба ҷои он, ки мустақиман синфҳо ё модулҳои мушаххас созем ва истифода барем, мо тавассути интерфейсҳо ё синфҳои абстрактӣ кор мекунем. Ин қобилияти эластикро зиёд мекунад ва санҷиш ва нигоҳдории кодиҳоро осон мекунад.

Дар тарҳрезии системҳои нармафзор, ин чунин татбиқ мешавад:

  • Компонентҳо аз интерфейсҳо вобастаанд, на аз иҷроишҳои мушаххас.
  • Иҷроишҳоро метавон тағир дод бе тағир додани коди, ки онҳоро истифода мебарад.
  • Имкон медиҳад, ки вобастагиро тавассути конструкторҳо, setters ё фабрикҳо (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 вобаста аст, на аз иҷроиши мушаххас. Ин имкон медиҳад, ки логерро ба осонӣ бо дигаре, масалан, барои сабт дар файл, иваз кардан мумкин аст, бе тағир додани UserService.