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.