Skip to content

Instantly share code, notes, and snippets.

@sirojiddin0198
Created July 24, 2025 05:51
Show Gist options
  • Select an option

  • Save sirojiddin0198/16339ff7e8ad21b8c433d3067351e255 to your computer and use it in GitHub Desktop.

Select an option

Save sirojiddin0198/16339ff7e8ad21b8c433d3067351e255 to your computer and use it in GitHub Desktop.
Solid -`D`

📌 Dependency Inversion Principle (DIP) – To‘liq Tushuncha

DIP – bu S.O.L.I.D prinsiplarining oxirgisi bo‘lib, kuchli arxitekturali, test qilinadigan, kengaytiriladigan dasturlar yaratishga yordam beradi.


📘 Ta’rif:

1. Yuqori darajadagi modullar past darajadagilarga bog‘lanmasin – ikkalasi abstraksiyaga (interfeysga) bog‘lansin.
2. Tafsilotlar (real klasslar) interfeyslarga bog‘liq bo‘lsin, aksincha emas.


💡 Maqsad nima?

  • Kod qismlarini mustaqil qilish
  • Test yozishni osonlashtirish
  • Yangi imkoniyatlar qo‘shishni osonlashtirish
  • Kodni qayta ishlatish

❌ DIP ga zid:

public class NotificationService
{
    public void Send()
    {
        var bot = new TelegramBotClient("TOKEN");
        bot.SendTextMessageAsync(123456, "Salom!");
    }
}

Bu klass TelegramBotClientga qattiq bog‘langan – test qilish yoki o‘zgartirish qiyin.


✅ DIP ga mos:

1. Interfeys:

public interface IMessageSender
{
    Task SendMessageAsync(long userId, string message);
}

2. Implementatsiya:

public class TelegramSender : IMessageSender
{
    public Task SendMessageAsync(long userId, string msg)
    {
        Console.WriteLine($"Telegram: {msg}");
        return Task.CompletedTask;
    }
}

3. Yuqori darajadagi modul:

public class NotificationService
{
    private readonly IMessageSender _sender;
    public NotificationService(IMessageSender sender) => _sender = sender;

    public Task Notify(long id, string msg) => _sender.SendMessageAsync(id, msg);
}

4. Ishlatish:

var service = new NotificationService(new TelegramSender());
await service.Notify(123456, "Xush kelibsiz!");

🧪 Test uchun Mock:

public class MockSender : IMessageSender
{
    public Task SendMessageAsync(long id, string msg)
    {
        Console.WriteLine($"[TEST]: {msg}");
        return Task.CompletedTask;
    }
}

🌐 DIP qayerda kerak?

  • Telegram botlarda (IMessageSender)
  • Web API’larda (ILogger, IRepository, IEmailSender)
  • Test yozishda (Mock sinflar)
  • Microservice arxitekturasida

✅ Xulosa

  • Kod interfeyslarga bog‘lansin, real klasslarga emas
  • Modullar mustaqil bo‘lsin
  • Kengaytiriladigan, test qilinadigan tizim tuzilsin

"Yaxshi dasturchi kod yozadi, zo‘ri – mustahkam arxitektura quradi."


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment