Sobes.tech
Junior — Middle

შეგიძლიათ ახსნათ დამოკიდებულების ინვერსიის პრინციპი და როგორ გამოიყენება იგი პროგრამული სისტემების დიზაინში?

sobes.tech AI

პასუხი AI-სგან

Ավելիքի կախվածության հակառակը (Dependency Inversion Principle, DIP) SOLID հինգ սկզբունքներից մեկն է և ասում է, որ.

  • Բարձր մակարդակի մոդուլները չպետք է կախված լինեն ցածր մակարդակի մոդուլներից: Երկուսն էլ պետք է կախված լինեն աբստրակցիաներից:
  • Աբստրակցիաները չպետք է կախված լինեն մանրամասներից: Մանրամասները պետք է կախված լինեն աբստրակցիաներից:

Սա նշանակում է, որ փոխարենը, որ ուղղակիորեն ստեղծենք և օգտագործենք կոնկրետ դասեր կամ մոդուլներ, մենք աշխատում ենք ինտերֆեյսների կամ աբստրակտ դասերի միջոցով: Սա մեծացնում է ճկունությունը և հեշտացնում է կոդի թեստավորումը և սպասարկումը:

Սա կիրառվում է ծրագրային համակարգերի նախագծման ժամանակ՝

  • Կոմպոնենտները կախված են ինտերֆեյսներից, ոչ թե կոնկրետ իրագործումներից:
  • Իրագործումները կարող են փոխվել առանց այն կոդը փոխելու, որը դրանք օգտագործում է:
  • Հնարավոր է ներդնել կախվածությունները կոնստրուկտորների, սեթերների կամ գործարանների միջոցով (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, ոչ թե կոնկրետ ConsoleLogger-ից: Սա թույլ է տալիս հեշտությամբ փոխարինել լոգգերին այլով, օրինակ՝ ֆայլում գրանցելու համար, առանց UserService-ը փոխելու: