Sobes.tech
Junior — Middle

Можете ли да дадете пример за използване на принципа на инверсия на зависимостите в реална разработка?

sobes.tech AI

Отговор от AI

Принципът за обръщане на зависимостите (Dependency Inversion Principle, DIP) гласи, че модулите от висок ниво не трябва да зависят директно от модулите от ниско ниво, а и двата трябва да зависят от абстракции.

Пример на Java:

// Абстракция
public interface MessageService {
    void sendMessage(String message);
}

// Конкретна реализация
public class EmailService implements MessageService {
    public void sendMessage(String message) {
        System.out.println("Изпращане на имейл: " + message);
    }
}

// Клас, зависещ от абстракцията, а не от конкретната реализация
public class Notification {
    private MessageService service;

    public Notification(MessageService service) {
        this.service = service;
    }

    public void notifyUser(String message) {
        service.sendMessage(message);
    }
}

// Използване
public class Main {
    public static void main(String[] args) {
        MessageService emailService = new EmailService();
        Notification notification = new Notification(emailService);
        notification.notifyUser("Здравей!");
    }
}

Тук класът Notification зависи от интерфейса MessageService, а не от конкретната реализация EmailService. Това позволява лесно да се сменя реализацията (например, към SMS услуга) без да се променя кодът на Notification. Този подход подобрява тестируемостта и разширяемостта на кода.