Sobes.tech
Junior — Middle

Czy mógłbyś podać przykład zastosowania zasady odwracania zależności w rzeczywistym rozwoju?

sobes.tech AI

Odpowiedź od AI

Zasada odwrócenia zależności (Dependency Inversion Principle, DIP) mówi, że moduły wysokiego poziomu nie powinny bezpośrednio zależeć od modułów niskiego poziomu, lecz oba powinny zależeć od abstrakcji.

Przykład w Java:

// Abstrakcja
public interface MessageService {
    void sendMessage(String message);
}

// Konkretna implementacja
public class EmailService implements MessageService {
    public void sendMessage(String message) {
        System.out.println("Wysyłanie emaila: " + message);
    }
}

// Klasa zależna od abstrakcji, a nie od konkretnej implementacji
public class Notification {
    private MessageService service;

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

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

// Użycie
public class Main {
    public static void main(String[] args) {
        MessageService emailService = new EmailService();
        Notification notification = new Notification(emailService);
        notification.notifyUser("Cześć!");
    }
}

Tutaj klasa Notification zależy od interfejsu MessageService, a nie od konkretnej implementacji EmailService. To pozwala na łatwą zmianę implementacji (np. na usługę SMS) bez modyfikacji kodu Notification. Podejście to poprawia testowalność i rozszerzalność kodu.