Sobes.tech
Junior — Middle

Можете ли објаснити принцип инверзије зависности и његову важност у пројектовању софтверских система?

sobes.tech АИ

Одговор од АИ

Princip inverzije zavisnosti (Dependency Inversion Principle, DIP) jedan je od pet SOLID principa, koji kaže da:

  • Moduli višeg nivoa ne bi trebalo da zavise od modula nižeg nivoa. Oba treba da zavise od apstrakcija.
  • Apstrakcije ne bi trebalo da zavise od detalja. Detalji treba da zavise od apstrakcija.

To znači da, umesto da klasa direktno kreira ili koristi konkretne implementacije zavisnosti, ona treba da radi preko interfejsa ili apstraktnih klasa. Ovo povećava fleksibilnost i testabilnost koda.

Primer u C#:

// Apstrakcija
public interface IMessageSender
{
    void Send(string message);
}

// Konkretna implementacija
public class EmailSender : IMessageSender
{
    public void Send(string message) {
        Console.WriteLine($"Slanje emaila: {message}");
    }
}

// Klasa koja zavisi od apstrakcije
public class NotificationService
{
    private readonly IMessageSender _messageSender;

    public NotificationService(IMessageSender messageSender) {
        _messageSender = messageSender;
    }

    public void Notify(string message) {
        _messageSender.Send(message);
    }
}

// Upotreba
var emailSender = new EmailSender();
var notification = new NotificationService(emailSender);
notification.Notify("Zdravo!");

Ovaj pristup omogućava lako menjanje implementacije slanja poruka bez izmene NotificationService, kao i lako ubacivanje mock objekata za testiranje.