Sobes.tech
Junior — Middle

¿Puedes dar un ejemplo de la idea de inversión de dependencias en el diseño de sistemas de software?

sobes.tech AI

Respuesta de la IA

Идея инвертирования зависимостей (Dependency Inversion Principle) заключается в том, что высокоуровневые модули не должны зависеть от низкоуровневых, а оба должны зависеть от абстракций (например, интерфейсов). Это позволяет снизить связанность и повысить гибкость кода.

Пример на Java:

interface MessageSender {
    void send(String message);
}

class EmailSender implements MessageSender {
    public void send(String message) {
        System.out.println("Sending email: " + message);
    }
}

class NotificationService {
    private MessageSender sender;

    public NotificationService(MessageSender sender) {
        this.sender = sender;
    }

    public void notifyUser(String message) {
        sender.send(message);
    }
}

// Использование:
MessageSender emailSender = new EmailSender();
NotificationService service = new NotificationService(emailSender);
service.notifyUser("Hello!");

Здесь NotificationService зависит не от конкретной реализации EmailSender, а от абстракции MessageSender. Это позволяет легко менять способ отправки сообщений без изменения сервиса.