Sobes.tech
Junior — Middle

Оё метавонед принсипи ивазкунии вобастагиро ва аҳамияти он дар тарҳрезии системаҳои нармафзорро шарҳ диҳед?

sobes.tech AI

Ҷавоб аз AI

Қатъийликни ўзгартириш принципи (Dependency Inversion Principle, DIP) — SOLID беш асосий принципларидан бири бўлиб, у шундай дейди:

  • Юқори даражали модуллар паст даражали модулларга боғлиқ бўлмаслиги керак. Иккала ҳам абстракцияларга боғлиқ бўлиши керак.
  • Абстракциялар тафсилотларга боғлиқ бўлмаслиги керак. Тафсилотлар абстракцияларга боғлиқ бўлиши керак.

Бу шундай маънога эгаки, синф тўғридан-тўғри мустаҳкамлаш ёки фойдаланиш ўрнига, у интерфейслар ёки абстракт синфлар орқали ишлаши керак. Бу коднинг мослашувчанлиги ва тестлаш имкониятини оширади.

C#да мисол:

// Абстракция
public interface IMessageSender
{
    void Send(string message);
}

// Аниқ реализация
public class EmailSender : IMessageSender
{
    public void Send(string message) {
        Console.WriteLine($"Email юборилмоқда: {message}");
    }
}

// Абстракцияга боғлиқ синф
public class NotificationService
{
    private readonly IMessageSender _messageSender;

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

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

// Ишлатиш
var emailSender = new EmailSender();
var notification = new NotificationService(emailSender);
notification.Notify("Салом!");

Бу ёндашув, хабар юборишни осонлик билан ўзгартиришга imkon беради, ҳамда тестлар учун mockларни жойлаштиришни осонлаштиради.