Sobes.tech
Middle+

Koji se pristupi koriste za poštovanje principa inverzije zavisnosti?

sobes.tech АИ

Одговор од АИ

Princip inverzije zavisnosti (Dependency Inversion Principle, DIP) kaže da:

  • Moduli visokog nivoa ne bi trebalo da zavise direktno od modula niskog nivoa.
  • Oba tipa modula treba da zavise od apstrakcija (npr. interfejsa).
  • Apstrakcije ne bi trebalo da zavise od detalja, detalji treba da zavise od apstrakcija.

Da bi se ovaj princip poštovao u C#, primenjuju se sledeći pristupi:

  1. Korišćenje interfejsa i apstraktnih klasa

    • Zavisnosti se deklaršu putem interfejsa, a ne putem konkretnih implementacija.
  2. Injektovanje zavisnosti (Dependency Injection, DI)

    • Zavisnosti se prosleđuju klasi spolja (kroz konstruktor, svojstva ili metode), a ne kreiraju unutar nje.
    • Ovo olakšava zamenu implementacija i pojednostavljuje testiranje.
  3. Inverzija kontrole (Inversion of Control, IoC)

    • Kontrola nad kreiranjem i povezivanjem objekata se prenosi na eksterni kontejner ili okvir.
  4. Korišćenje DI kontejnera

    • Na primer, Microsoft.Extensions.DependencyInjection, Autofac, Ninject i dr.
    • Oni upravljaju životnim ciklusom i rešavanjem zavisnosti.

Primer injektovanja zavisnosti putem konstruktora:

public interface ILogger
{
    void Log(string message);
}

public class ConsoleLogger : ILogger
{
    public void Log(string message) => Console.WriteLine(message);
}

public class UserService
{
    private readonly ILogger _logger;

    public UserService(ILogger logger)
    {
        _logger = logger;
    }

    public void CreateUser(string name)
    {
        // logika kreiranja korisnika
        _logger.Log($"Korisnik {name} je kreiran.");
    }
}

U ovom primeru, UserService zavisi od apstrakcije ILogger, a konkretna implementacija ConsoleLogger se prosleđuje spolja, što je u skladu sa principom inverzije zavisnosti.