Sobes.tech
Middle+

Qanday yondashuvlar bog'liqliklarni teskari qilish prinsipiga rioya qilish uchun ishlatiladi?

sobes.tech AI

AIdan javob

Dependency Inversion Principle (DIP) yoki Bog'liqliklarni Ters O'zgartirish Prinsipi shuni anglatadiki:

  • Yuqori darajadagi modullar past darajadagi modullarga to'g'ridan-to'g'ri bog'liq bo'lmasligi kerak.
  • Ikkala turdagi modullar ham abstraktsiyalarga (masalan, interfeyslar) bog'liq bo'lishi kerak.
  • Abstraktsiyalar detallarga bog'liq bo'lmasligi kerak, detallar abstraktsiyalarga bog'liq bo'lishi kerak.

Ushbu prinsipni C# da amalga oshirish uchun quyidagi yondashuvlar qo'llaniladi:

  1. Interfeyslar va abstrakt sinflardan foydalanish

    • Bog'liqliklar konkret implementatsiyalar o'rniga interfeyslar orqali e'lon qilinadi.
  2. Bog'liqliklarni injektsiya qilish (Dependency Injection, DI)

    • Bog'liqliklar tashqaridan (konstruktor, xususiyatlar yoki metodlar orqali) sinfga o'tkaziladi va ichida yaratilmaydi.
    • Bu implementatsiyalarni o'zgartirishni osonlashtiradi va testlarni soddalashtiradi.
  3. Kontrolni Ters O'zgartirish (Inversion of Control, IoC)

    • Ob'ektlarni yaratish va ulashni nazorat qilish tashqi konteyner yoki frameworkga o'tkaziladi.
  4. DI konteynerlaridan foydalanish

    • Masalan, Microsoft.Extensions.DependencyInjection, Autofac, Ninject va boshqalar.
    • Ular hayot aylanishini va bog'liqliklarni hal qilishni boshqaradi.

Misol uchun, konstruktor orqali bog'liqliklarni injektsiya qilish:

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)
    {
        // foydalanuvchi yaratish logikasi
        _logger.Log($"Foydalanuvchi {name} yaratildi.");
    }
}

Ushbu misolda, UserService ILogger abstraksiyasiga bog'liq va konkret ConsoleLogger implementatsiyasi tashqaridan o'tkaziladi, bu bog'liqliklarni Ters O'zgartirish prinsipiga mos keladi.