Wire'dan sonra: kanna-di ile Go dependency injection

Go'da dependency injection yapmak isteyenler uzun süre Google Wire'a güveniyordu. Ama Wire artık yeni özellikler almıyor ve insanlar başka seçenekler arıyor. kanna-di tam da bu boşluğu doldurmak için yazıldı.

Wire ile çalışırken ne yapıyorsun? Bir wire.go dosyası açıyorsun, //go:build wireinject ekliyor, injector'ün signature'ını kendin yazıyorsun, wire.NewSet ile provider'ları topluyorsun, wire.Build çağırıyorsun, her interface için wire.Bind yazıyorsun. Yeni bir constructor ekledikçe onu bir sete ekliyorsun. Kısacası, Wire'a hangi fonksiyonları kullanacağını söylemek ayrı bir iş ve kodunuzun başka yerinde yapılıyor. Oysa constructor'lar zaten type'larının yanında oturuyor. İkinci kez listelemek zorunda kalıyorsun.

kanna-di bu işlemi tersine çeviriyor. Siz sadece container olacak struct'ı işaretliyorsunuz. Araç, her field'ın type'ına bakıyor, constructor'ı buluyor ve gerekli kodu üretiyor. Üretilen kod saf Go'dur ve çalışma zamanında hiçbir import gerektirmez, Wire gibi.

Fark şu: Wire'da provider'ları ayrı yerde tanımlamak zorunlu. kanna-di'de ise constructor'lar zaten yanlarında olduğu için tekrar yazmanız gerekmez. Daha az boilerplate, daha az hata riski.

Eğer Wire'ın sadeliğini seviyorsanız ama tekrarlayan tanımlardan sıkıldıysanız, kanna-di'yi denemek değer. Özellikle yeni bir Go projesinde başlamak istiyorsanız, bu yaklaşım zaman kazandırabilir.

konu hakkında tepkinizi verebilirsiniz