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.