Junior — Middle
Pouvez-vous donner un exemple de la mise en œuvre du principe d'inversion des dépendances dans la conception de systèmes logiciels?
sobes.tech IA
Réponse de l'IA
Принцип инверсии зависимостей (Dependency Inversion Principle) заключается в том, что высокоуровневые модули не должны зависеть от низкоуровневых, а оба должны зависеть от абстракций (интерфейсов). В Node.js это можно реализовать через внедрение зависимостей (Dependency Injection).
Пример:
// Абстракция
class Logger {
log(message) {
throw new Error('Method not implemented');
}
}
// Конкретная реализация
class ConsoleLogger extends Logger {
log(message) {
console.log(message);
}
}
// Высокоуровневый модуль
class UserService {
constructor(logger) {
this.logger = logger; // зависимость через конструктор
}
createUser(name) {
// логика создания пользователя
this.logger.log(`User ${name} created`);
}
}
// Использование
const logger = new ConsoleLogger();
const userService = new UserService(logger);
userService.createUser('Alice');
Здесь UserService зависит не от конкретного ConsoleLogger, а от абстракции Logger, что облегчает тестирование и замену реализации.