Sobes.tech
Middle+

Asılılıqların Tərs Çevrilməsi Prinsipinə riayət etmək üçün hansı yanaşmalar istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Asılılıqların Tərs Çevrilməsi Prinsipi (Dependency Inversion Principle, DIP) belədir:

  • Yüksək səviyyəli modullar aşağı səviyyəli modullardan birbaşa asılı olmamalıdır.
  • Hər iki modul növü abstraksiyalara (məsələn, interfeyslərə) asılı olmalıdır.
  • Abstraksiyalar detallardan asılı olmamalıdır, detallər abstraksiyalara asılı olmalıdır.

Bu prinsipi C# dilində tətbiq etmək üçün aşağıdakı yanaşmalar istifadə olunur:

  1. Interfeys və abstrakt siniflərdən istifadə

    • Asılılıqlar konkret tətbiqlər yerinə interfeyslər vasitəsilə elan edilir.
  2. Asılılıqların injeksiyası (Dependency Injection, DI)

    • Asılılıqlar sinfə xaricdən (konstruktor, xüsusiyyət və ya metodlar vasitəsilə) ötürülür və içində yaradılmır.
    • Bu, tətbiqlərin asanlıqla dəyişdirilməsinə və testlərin sadələşdirilməsinə imkan verir.
  3. İnversiya idarəetməsi (Inversion of Control, IoC)

    • Obiektlərin yaradılması və bağlanması idarəsi xarici konteyner və ya çərçivəyə verilir.
  4. DI konteynerlərindən istifadə

    • Məsələn, Microsoft.Extensions.DependencyInjection, Autofac, Ninject və s.
    • Onlar həyat dövrünü və asılılıqları həll etməyi idarə edir.

Misal üçün, konstruktor vasitəsilə asılılıqların injeksiyası:

public interface ILogger
{
    void Log(string message);
}

public class ConsoleLogger : ILogger
{
    public void Log(string message) => Console.WriteLine(message);
}

public class UserService
{
    private readonly ILogger _logger;

    public UserService(ILogger logger)
    {
        _logger = logger;
    }

    public void CreateUser(string name)
    {
        // istifadəçi yaradılması loqikası
        _logger.Log($"İstifadəçi {name} yaradıldı.");
    }
}

Bu nümunədə, UserService ILogger abstraksiyasına asılıdır və konkret ConsoleLogger tətbiqi xaricdən ötürülür, bu da asılılıqların tərs çevrilməsi prinsipinə uyğundur.