Middle+
Kokie požiūriai naudojami siekiant laikytis priklausomybių inversijos principo?
sobes.tech AI
Atsakymas iš AI
Principas, vadinamas priklausomybių inversijos principu (Dependency Inversion Principle, DIP), reiškia, kad:
- Aukšto lygio moduliai neturėtų tiesiogiai priklausyti žemo lygio moduliams.
- Abu moduliai turėtų priklausyti nuo abstrakcijų (pavyzdžiui, sąsajų).
- Abstrakcijos neturėtų priklausyti nuo detalių, detalės turėtų priklausyti nuo abstrakcijų.
Šiam principui laikytis C# taikomi šie požiūriai:
-
Sąsajų ir abstrakčių klasių naudojimas
- Priklausomybės deklaruojamos per sąsajas, o ne konkrečias realizacijas.
-
Priklausomybių injekcija (Dependency Injection, DI)
- Priklausomybės perduodamos klasei iš išorės (per konstruktorių, savybes ar metodus), o ne kuriamos viduje.
- Tai leidžia lengvai keisti realizacijas ir palengvina testavimą.
-
Valdymo inversija (Inversion of Control, IoC)
- Objekto kūrimo ir jungimo kontrolė perduodama išoriniam konteineriui ar karkasui.
-
Naudojant DI konteinerius
- Pavyzdžiui, Microsoft.Extensions.DependencyInjection, Autofac, Ninject ir kt.
- Jie valdo objekto gyvavimo ciklą ir priklausomybių sprendimą.
Pavyzdys, kaip naudoti priklausomybių injekciją per konstruktorių:
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)
{
// naudotojo kūrimo logika
_logger.Log($"Vartotojas {name} sukurtas.");
}
}
Šiame pavyzdyje UserService priklauso nuo abstrakčios sąsajos ILogger, o konkreti ConsoleLogger realizacija yra perduodama iš išorės, kas atitinka priklausomybių inversijos principą.