Sobes.tech
Middle+

Bağımlılıkların Tersine Çevrilmesi İlkesine uyum sağlamak için hangi yaklaşımlar kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Ba Bağımlılıkların Ters Çevirisi İlkesi (Dependency Inversion Principle, DIP) şu varsayımlarda bulunur:

  • Yüksek seviyeli modüller, düşük seviyeli modüllere doğrudan bağlı olmamalıdır.
  • Her iki modül tipi de soyutlamalara (örneğin, arayüzlere) bağlı olmalıdır.
  • Soyutlamalar, detaylara bağlı olmamalıdır; detaylar, soyutlamalara bağlı olmalıdır.

Bu prensibi C#'ta uygulamak için aşağıdaki yaklaşımlar kullanılır:

  1. Arayüzler ve soyut sınıflar kullanımı

    • Bağımlılıklar, somut uygulamalar yerine arayüzler aracılığıyla bildirilir.
  2. Bağımlılık Enjeksiyonu (Dependency Injection, DI)

    • Bağımlılıklar, sınıfa dışarıdan (yapıcı, özellikler veya metodlar aracılığıyla) geçirilir ve içinde oluşturulmaz.
    • Bu, uygulamaları kolayca değiştirmeyi ve testleri basitleştirmeyi sağlar.
  3. Kontrolün Ters Çevrilmesi (Inversion of Control, IoC)

    • Nesne oluşturma ve bağlama kontrolü, harici bir konteyner veya framework'e devredilir.
  4. DI konteynerleri kullanımı

    • Örneğin, Microsoft.Extensions.DependencyInjection, Autofac, Ninject vb.
    • Bunlar, yaşam döngüsünü ve bağımlılıkların çözümünü yönetir.

Örnek: Yapıcı aracılığıyla bağımlılık enjeksiyonu:

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)
    {
        // kullanıcı oluşturma mantığı
        _logger.Log($"Kullanıcı {name} oluşturuldu.");
    }
}

Bu örnekte, UserService soyutlama ILogger'a bağımlıdır ve somut uygulama ConsoleLogger, dışarıdan geçirilir, bu da bağımlılıkların tersine çevrilmesi ilkesine uygundur.