Sobes.tech
Junior — Middle

Kas saaksite selgitada sõltuvuste pööramise põhimõtet ja kuidas seda rakendatakse tarkvarasüsteemide projekteerimisel?

sobes.tech AI

Vastus AI-lt

Sõltuvuse pööramise põhimõte (Dependency Inversion Principle, DIP) on üks viiest SOLID põhimõttest, mis ütleb, et:

  • Kõrgema taseme moodulid ei tohiks sõltuda madalama taseme moodulitest. Mõlemad peaksid sõltuma abstraktsioonidest.
  • Abstraktsioonid ei tohiks sõltuda üksikdetailidest. Detailid peaksid sõltuma abstraktsioonidest.

See tähendab, et selle asemel, et otse luua ja kasutada konkreetseid klasse või mooduleid, töötame liideste või abstraktsete klasside kaudu. See suurendab paindlikkust ning lihtsustab koodi testimist ja hooldust.

Süsteemide disainimisel rakendatakse seda järgmiselt:

  • Komponendid sõltuvad liidestest, mitte konkreetsetest rakendustest.
  • Rakendusi saab muuta ilma kasutatava koodi muutmata.
  • Sõltuvusi saab sisestada konstruktorite, setterite või tehaste kaudu (Dependency Injection).

Näide Node.js-is:

// Abstraktsioon
class Logger {
  log(message) {
    throw new Error('Not implemented');
  }
}

// Konkreetne rakendus
class ConsoleLogger extends Logger {
  log(message) {
    console.log(message);
  }
}

// Klass, mis sõltub abstraktsioonist
class UserService {
  constructor(logger) {
    this.logger = logger;
  }

  createUser(name) {
    // kasutaja loomise loogika
    this.logger.log(`Kasutaja ${name} loodud`);
  }
}

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

Siin sõltub UserService abstraktsioonist Logger, mitte konkreetsetest ConsoleLoggerist. See võimaldab hõlpsasti asendada logger teisega, näiteks faili kirjutamiseks, ilma et UserService't peaks muutma.