Sobes.tech
Junior — Middle

Можете ли објаснити принцип инверзије зависности и како се он примењује у пројектовању софтверских система?

sobes.tech АИ

Одговор од АИ

Princip inverzije zavisnosti (Dependency Inversion Principle, DIP) jedan je od pet SOLID principa i kaže da:

  • Moduli visokog nivoa ne bi trebalo da zavise od modula niskog nivoa. Oba treba da zavise od apstrakcija.
  • Apstrakcije ne bi trebalo da zavise od detalja. Detalji treba da zavise od apstrakcija.

To znači da umesto da direktno kreiramo i koristimo konkretne klase ili module, radimo preko interfejsa ili apstraktnih klasa. Ovo povećava fleksibilnost i olakšava testiranje i održavanje koda.

U dizajnu softverskih sistema, ovo se primenjuje na sledeći način:

  • Komponente zavise od interfejsa, a ne od konkretnih implementacija.
  • Implementacije se mogu menjati bez promene koda koji ih koristi.
  • Omogućava injektovanje zavisnosti putem konstruktora, settera ili fabrika (Dependency Injection).

Primer u Node.js:

// Apstrakcija
class Logger {
  log(message) {
    throw new Error('Nije implementirano');
  }
}

// Konkretna implementacija
class ConsoleLogger extends Logger {
  log(message) {
    console.log(message);
  }
}

// Klasa koja zavisi od apstrakcije
class UserService {
  constructor(logger) {
    this.logger = logger;
  }

  createUser(name) {
    // logika za kreiranje korisnika
    this.logger.log(`Korisnik ${name} kreiran`);
  }
}

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

Ovde, UserService zavisi od apstrakcije Logger, a ne od konkretne klase ConsoleLogger. Ovo omogućava lako zamenjivanje logera drugim, na primer, za zapisivanje u fajl, bez promene UserService.