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ларни жойлаштиришни осонлаштиради.