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:
-
Arayüzler ve soyut sınıflar kullanımı
- Bağımlılıklar, somut uygulamalar yerine arayüzler aracılığıyla bildirilir.
-
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.
-
Kontrolün Ters Çevrilmesi (Inversion of Control, IoC)
- Nesne oluşturma ve bağlama kontrolü, harici bir konteyner veya framework'e devredilir.
-
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.