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:
-
Liideste ja abstraktsete klasside kasutamine
- Sõltuvused deklareeritakse liideste kaudu, mitte konkreetsete rakenduste kaudu.
-
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.
-
Kontrolli pööramine (Inversion of Control, IoC)
- Objekti loomise ja sidumise kontroll antakse välisele konteinerile või raamistikule.
-
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.