Sobes.tech
Middle+

Millised lähenemisviisid kasutatakse sõltuvuste pööramise printsiibi järgimiseks?

sobes.tech AI

Vastus AI-lt

Sõltuvuste pöörde põhimõte (Dependency Inversion Principle, DIP) tähendab, et:

  • Kõrgema taseme moodulid ei tohiks otseselt sõltuda madalama taseme moodulitest.
  • Mõlemad moodulid peaksid sõltuma abstraktsioonidest (näiteks liidestest).
  • Abstraktsioonid ei tohiks sõltuda üksikasjadest, üksikasjad peaksid sõltuma abstraktsioonidest.

Selle põhimõtte järgimiseks kasutatakse C#-s järgmisi lähenemisviise:

  1. Liideste ja abstraktsete klasside kasutamine

    • Sõltuvused deklareeritakse liideste kaudu, mitte konkreetsete rakenduste kaudu.
  2. Sõltuvuste sisestamine (Dependency Injection, DI)

    • Sõltuvused edastatakse klassile väljastpoolt (konstruktorite, omaduste või meetodite kaudu), mitte ei loodud sees.
    • See võimaldab hõlpsasti asendada rakendusi ja lihtsustada testimist.
  3. Kontrolli pööramine (Inversion of Control, IoC)

    • Objekti loomise ja sidumise kontroll antakse välisele konteinerile või raamistikule.
  4. DI konteinerite kasutamine

    • Näiteks Microsoft.Extensions.DependencyInjection, Autofac, Ninject ja teised.
    • Nad haldavad objekti elutsüklit ja sõltuvuste lahendamist.

Näide sõltuvuste sisestamisest konstruktoriga:

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)
    {
        // kasutaja loomise loogika
        _logger.Log($"Kasutaja {name} loodud.");
    }
}

Selles näites sõltub UserService abstraktsioonist ILogger, ja konkreetne ConsoleLogger rakendus edastatakse väljastpoolt, mis vastab sõltuvuste pööramise põhimõttele.