- Reflect - JavaScript | MDN
- The Reflect namespace object contains static methods for invoking interceptable JavaScript object internal methods. The methods are the same as those of proxy handlers.
Node.js ile sunucu geliştirme yaparken sayısız Spring cazibesine kapılıyoruz.
Yapısı düzenli, sistematik ve izinsiz kırılması zor olduğu için.
Bu yüzden Node.js dünyasında Nest.js adlı bir framework ortaya çıktı.
En azından Spring gibi yapılandırılmış bir şekilde sunucu geliştirme yapmak isteyen birçok istek vardı.
Ancak Spring'in DI'ı, çalışma zamanı yansımasını kullanarak dil seviyesinde DI gerçekleştirebilmek için destek sağlar.
Dotnet de aynı şekilde öznitelik tabanlı izleme yaparak yansıma ile DI gerçekleştiriyor.
Peki Nest.js DI'ı nasıl gerçekleştiriyor?
Spring ve Dotnet'in temelini oluşturan dil derleyici dili olduğu için dil seviyesinde yansımayı destekliyor ancak
ecma script sadece... yorumlayıcı bir dil olan sıradan bir şey değil mi?
Aşağıda Nest.js öğreticisindeki örneklerden biri bulunmaktadır.
Bu şekilde TypeScript ile yazılan kod derlendiğinde tip etiketleri tamamen kaybolacak ve sınıflar, oluşturucuya gereken argüman türlerini bilmeyecek.
Çözüm dil özelliklerindeydi.
Reflect
Neyse ki, dil seviyesinde her nesneye meta veri eklemek için tasarlanmış bir özellik vardı.
Sadece nesnelere meta veri ekleyen ve alan basit bir işlev.
Bu yüzden TypeScript düşündü.
Peki, sınıfı derlerken tip bilgilerini meta verilerine mi eklesek?
Bu yüzden TypeScript, sınıf deköratörünün bulunduğu her yerde ilgili sınıfın oluşturucusuna gereken bağımsız değişken bilgilerini Reflect'e kaydediyor.
Burada herhangi bir dönüşüm veya kara büyü yok, sadece TypeScript derleyicisinin işlevi.
Bu şekilde ilgili sınıfın meta verilerine oluşturucuya gereken bağımsız değişkenlerin türleri eklenirse
Sınıfı çağırıp türü bildiğimiz için doğrudan ekleyebiliyoruz.
Bunun uygulanmasını NestJS'de de görebilirsiniz, ancak çok uzun olduğu için farklı bir kütüphane öneririm.
Microsoft tarafından oluşturulduğu için kodu oldukça temiz.
Bir göz atmanızı öneririm ve yazıyı burada sonlandırıyorum.
Yorumlar0