Sobes.tech
Junior — Middle

Môžete vysvetliť princíp invertovania závislostí a ako sa uplatňuje pri navrhovaní softvérových systémov?

sobes.tech AI

Odpoveď od AI

Princíp invertovania závislostí (Dependency Inversion Principle, DIP) je jeden z piatich princípov SOLID a hovorí, že:

  • Moduly vysokého stupňa by nemali závisieť od modulov nízkeho stupňa. Oba by mali závisieť od abstrakcií.
  • Abstrakcie by nemali závisieť od detailov. Detaily by mali závisieť od abstrakcií.

To znamená, že namiesto toho, aby sme priamo vytvárali a používali konkrétne triedy alebo moduly, pracujeme cez rozhrania alebo abstraktné triedy. To zvyšuje flexibilitu a uľahčuje testovanie a údržbu kódu.

V návrhu softvérových systémov sa to aplikuje takto:

  • Komponenty závisia od rozhraní, nie od konkrétnych implementácií.
  • Implementácie je možné meniť bez zmeny kódu, ktorý ich používa.
  • Umožňuje vkladanie závislostí prostredníctvom konštruktorov, setterov alebo tovární (Dependency Injection).

Príklad v Node.js:

// Abstrakcia
class Logger {
  log(message) {
    throw new Error('Neimplementované');
  }
}

// Konkrétna implementácia
class ConsoleLogger extends Logger {
  log(message) {
    console.log(message);
  }
}

// Trieda závislá od abstrakcie
class UserService {
  constructor(logger) {
    this.logger = logger;
  }

  createUser(name) {
    // logika vytvárania používateľa
    this.logger.log(`Používateľ ${name} vytvorený`);
  }
}

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

Tu závisí UserService od abstrakcie Logger, nie od konkrétnej implementácie. To umožňuje ľahko nahradiť logger iným, napríklad na zapisovanie do súboru, bez zmeny UserService.