Constructor Injection mi Property Injection mi:.NET'te Tartışmalı Konu

Dependency injection konusunda.NET ekosisteminde bir tartışma var: Constructor injection mi, yoksa property injection mi kullanmalı?

Bir süredir projeler geliştiriyorum ve söylemeliyim ki, constructor injection daha mantıklı geliyor bana. Neden? Çünkü sınıfın bağımlılıklarını açık hale getiriyor. Bir sınıfın constructor'ına baktığında, o sınıfın neye ihtiyaç duyduğunu hemen anlıyorsun. Hiçbir gizli bağımlılık yok, hiçbir sürpriz yok.

Property injection'da ise durum farklı. Sınıfı okurken, hangi property'lerin dışarıdan set edileceğini bilmek zor oluyor. Özellikle null reference exception'larla uğraştığında, bu belirsizlik sinir bozucu hale geliyor. Bir property'nin set edilip edilmediğini kontrol etmek için her yerinde null check yazmak gerekebiliyor.

Ancak property injection'ın da avantajları var. Bazı durumlarda, mesela UI framework'leri veya eski kod tabanlarında, constructor'a çok sayıda parametre eklemek pratik değil. Property injection daha esnek. Ayrıca circular dependency sorunlarından kurtarıyor. Constructor injection'da A B A döngüsü varsa, property injection ile bunu çözebilirsin.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Praktik açıdan bakarsak, tercih tamamen senin mimariye bağlı. Eğer SOLID prensiplerini ciddiye alıyorsan ve clean code yazıyorsan, constructor injection tercih etmelisin. Bağımlılıklar açık, test etmesi kolay, sınıf immutable kalabiliyor.

Ancak gerçek dünyada bazen pragmatizm kazanıyor. Bir ASP.NET Core projesinde controller'lar constructor injection ile güzel çalışır. Ama bir WPF ViewModel'inde property injection daha doğal hissedebiliyor. Bazı ORM'ler de entity'lerin property injection ile çalışmasını bekliyor.

Benim tavsiyem: Constructor injection'ı default al, ama property injection'ın uygun olduğu yerlerde (UI binding, optional dependencies) tereddüt etme. İkisini aynı sınıfta karıştırma sadece. Bir kararı ver ve tutarlı kal. Kod tabanında karışıklık, test yazarken cehenneme dönüşüyor.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz