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.