Sobes.tech
Junior — Middle

Bog'liq dasturiy ta'minot tizimlarini loyihalashda bog'liqliklarni o'zaro teskari qilish tamoyili va uning ahamiyatini tushuntirib bera olasizmi?

sobes.tech AI

AIdan javob

Dependency Inversion Principle (DIP) — bu SOLID ning besh prinsiplaridan biri bo‘lib, u shunday deydi:

  • Yuqori darajali modullar past darajali modullarga bog‘liq bo‘lishi kerak emas. Ikkalasi ham abstraktsiyalarga bog‘liq bo‘lishi kerak.
  • Abstraktsiyalar detallariga bog‘liq bo‘lmasligi kerak. Detallar abstraktsiyalarga bog‘liq bo‘lishi kerak.

Bu shuni anglatadiki, sinf to‘g‘ridan-to‘g‘ri bog‘liqliklarni yoki aniq implementatsiyalarni yaratish yoki ishlatish o‘rniga, u interfeyslar yoki abstrakt sinflar orqali ishlashi kerak. Bu kodning moslashuvchanligi va test qilish imkoniyatini oshiradi.

C# misoli:

// Abstraktsiya
public interface IMessageSender
{
    void Send(string message);
}

// Aniq implementatsiya
public class EmailSender : IMessageSender
{
    public void Send(string message) {
        Console.WriteLine($"Email yuborilmoqda: {message}");
    }
}

// Abstraktsiyaga bog‘liq sinf
public class NotificationService
{
    private readonly IMessageSender _messageSender;

    public NotificationService(IMessageSender messageSender) {
        _messageSender = messageSender;
    }

    public void Notify(string message) {
        _messageSender.Send(message);
    }
}

// Foydalanish
var emailSender = new EmailSender();
var notification = new NotificationService(emailSender);
notification.Notify("Salom!");

Bu yondashuv, xabar yuborish implementatsiyasini o‘zgartirishni osonlashtiradi va testlar uchun mocklarni kiritishni osonlashtiradi.