Sobes.tech
Junior — Middle

Puoi spiegare il principio di inversione delle dipendenze e come viene applicato nella progettazione dei sistemi software?

sobes.tech AI

Risposta dell'AI

Il principio di inversione delle dipendenze (Dependency Inversion Principle, DIP) è uno dei cinque principi SOLID, che afferma che:

  • I moduli di livello superiore non devono dipendere da quelli di livello inferiore. Entrambi devono dipendere da astrazioni.
  • Le astrazioni non devono dipendere dai dettagli. I dettagli devono dipendere dalle astrazioni.

Ciò significa che, invece di creare e utilizzare direttamente classi o moduli specifici, lavoriamo tramite interfacce o classi astratte. Questo aumenta la flessibilità e facilita i test e la manutenzione del codice.

Nel progettare sistemi software, questo si applica così:

  • I componenti dipendono da interfacce, non da implementazioni concrete.
  • Le implementazioni possono essere cambiate senza modificare il codice che le utilizza.
  • Permette di iniettare dipendenze tramite costruttori, setter o fabbriche (Dependency Injection).

Esempio in Node.js:

// Astrazione
class Logger {
  log(message) {
    throw new Error('Non implementato');
  }
}

// Implementazione concreta
class ConsoleLogger extends Logger {
  log(message) {
    console.log(message);
  }
}

// Classe che dipende dall'astrazione
class UserService {
  constructor(logger) {
    this.logger = logger;
  }

  createUser(name) {
    // logica di creazione utente
    this.logger.log(`Utente ${name} creato`);
  }
}

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

Qui, UserService dipende dall'astrazione Logger, non da ConsoleLogger specifico. Questo permette di sostituire facilmente il logger con un altro, ad esempio, per scrivere su un file, senza modificare UserService.