DIP – bu S.O.L.I.D prinsiplarining oxirgisi bo‘lib, kuchli arxitekturali, test qilinadigan, kengaytiriladigan dasturlar yaratishga yordam beradi.
1. Yuqori darajadagi modullar past darajadagilarga bog‘lanmasin – ikkalasi abstraksiyaga (interfeysga) bog‘lansin.
2. Tafsilotlar (real klasslar) interfeyslarga bog‘liq bo‘lsin, aksincha emas.
- Kod qismlarini mustaqil qilish
- Test yozishni osonlashtirish
- Yangi imkoniyatlar qo‘shishni osonlashtirish
- Kodni qayta ishlatish
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.
public interface IMessageSender
{
Task SendMessageAsync(long userId, string message);
}public class TelegramSender : IMessageSender
{
public Task SendMessageAsync(long userId, string msg)
{
Console.WriteLine($"Telegram: {msg}");
return Task.CompletedTask;
}
}public class NotificationService
{
private readonly IMessageSender _sender;
public NotificationService(IMessageSender sender) => _sender = sender;
public Task Notify(long id, string msg) => _sender.SendMessageAsync(id, msg);
}var service = new NotificationService(new TelegramSender());
await service.Notify(123456, "Xush kelibsiz!");public class MockSender : IMessageSender
{
public Task SendMessageAsync(long id, string msg)
{
Console.WriteLine($"[TEST]: {msg}");
return Task.CompletedTask;
}
}- Telegram botlarda (
IMessageSender) - Web API’larda (
ILogger,IRepository,IEmailSender) - Test yozishda (
Mocksinflar) - Microservice arxitekturasida
- 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."