Mimari (IT)Mimar, Arka Uç Geliştirici

"Dependency Inversion" ilkesinin mimari tasarımda ne anlama geldiğini ve bunun kodda basit bağımlılık tersine çevirmeden nasıl farklılaştığını açıklar mısınız?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Bağımlılık Tersine Çevirme Prensibi (DIP), yüksek seviye modüllerin düşük seviye modüllere bağımlı olmaması gerektiğini ve her iki türün de soyutlamalara (arayüzlere) bağımlı olması gerektiğini belirten bir mimari ilkedir.

  • Soyutlamalar detaylara bağımlı olmamalıdır; detaylar, soyutlamalara bağımlı olmalıdır.

Bu, iş mantığının (örneğin, sipariş işleme hizmeti) belirli bir altyapı uygulamasını (örneğin, e-posta gönderim sınıfı) bilmemesi ve bunun yerine DI konteyneri veya manuel olarak sağlanan bir soyutlama (arayüz) üzerinden çalışması gerektiği anlamına gelir.

C# ile bir kod örneği:

public interface IEmailSender { void Send(string to, string message); } public class SmtpEmailSender : IEmailSender { public void Send(string to, string message) { // E-posta gönderim uygulaması } } public class OrderService { private readonly IEmailSender _emailSender; public OrderService(IEmailSender emailSender) { _emailSender = emailSender; } public void PlaceOrder(string customer) { // iş mantığı _emailSender.Send(customer, "Siparişiniz alınmıştır!"); } }

Anahtar özellikler:

  • Uygulama detaylarını kolaylıkla değiştirmeye olanak tanır (örneğin, testlerde bir sahte (mock) kullanmak gibi).
  • Mimariyi test edilebilirlik ve genişletilebilirlik açısından artırır.
  • Modüller arasında zayıf bağlanabilirlik sağlar.

Kandırmacalı Sorular.

DIP, sadece bağımlılıkları constructor ile enjekte etmek midir?

Hayır. DIP, soyutlamaları uygulamalardan ayırma ile ilgilidir. Bağımlılık Enjektesi (Dependency Injection, DI) sadece DIP'nin uygulanmasında kullanılan bir araçtır. DIP, DI konteyneri olmadan da, soyutlamalar ve detaylar arasındaki ayrımı manuel olarak sağlayarak uygulanabilir.

Eğer bir arayüzün bir uygulaması varsa, DIP zorunlu mudur?

Evet, prensip hala geçerlidir, genişletme olanağı varsa. Soyutlamaların tanıtılması, sistemi, yüksek seviye kodda değişiklik yapmadan gereksinim değişikliklerine hazırlar. Tek bir arayüz uygulaması olsa bile, zayıf bağlanabilirlik sistemi test etmeyi ve geliştirmeyi kolaylaştırır.

Fabrikalarda veya servis lokatörlerinde mantık kullanarak DIP’yi ihlal edebilir miyiz?

Evet. Eğer fabrika veya servis lokatörü, detay uygulamalarını biliyor ve bunları, istemci tarafındaki arayüz kullanılmadan dinamik olarak bağlıyorsa, dışarıda soyutlamalar bulunsa bile DIP ihlal edilmiş olur.