Sobes.tech
Junior — Middle

Puteți oferi un exemplu de utilizare a principiului inversiunii dependențelor în dezvoltarea reală?

sobes.tech AI

Răspuns de la AI

Principiul inversiunii dependențelor (Dependency Inversion Principle, DIP) afirmă că modulele de nivel înalt nu trebuie să depindă direct de modulele de nivel inferior, ci ambele trebuie să depindă de abstracții.

Exemplu în Java:

// Abstracție
public interface MessageService {
    void sendMessage(String message);
}

// Implementare concretă
public class EmailService implements MessageService {
    public void sendMessage(String message) {
        System.out.println("Trimitere email: " + message);
    }
}

// Clasă care depinde de abstracție, nu de implementarea concretă
public class Notification {
    private MessageService service;

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

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

// Utilizare
public class Main {
    public static void main(String[] args) {
        MessageService emailService = new EmailService();
        Notification notification = new Notification(emailService);
        notification.notifyUser("Salut!");
    }
}

Aici, clasa Notification depinde de interfața MessageService, nu de implementarea concretă EmailService. Acest lucru permite schimbarea ușoară a implementării (de exemplu, pentru un serviciu SMS) fără a modifica codul Notification. Această abordare îmbunătățește testabilitatea și extensibilitatea codului.