Bugünlerde aklımda bir soru ortaya çıktı:
Javascript, geleneksel Yazılım Geliştirme'de iyi bir uygulama olarak kabul edilen hemen hemen her şeye karşı çıkıyor mu?
Bu ifadeyle ilgili bir dizi sorum / gözlemim var, ancak StackExchange'in formatına saygı göstermek için, bunları farklı sorulara bölmem daha iyi olacaktır.
Gerektiren modül
Günümüzde standart Javascript kodu şöyle görünür:
const someModule = require('./someModule')
module.exports = function doSomethingWithRequest() {
// do stuff
someModule.someFunc()
// do other stuff
}
Avantajları
- Kapsülleme: modül bağımsız çalışır ve işlevlerini yerine getirmek için gereken her şeyi bilir.
- Bir colorary olarak, modülü kullanmak istemciler için daha kolaydır.
Dezavantajları
- Zayıf test edilebilirlik: Bu DI kullanılmadığında standarttır, ancak Javscript gibi dinamik dillerde *
mockery
veya gibi modüllerle çevrelenebilirrewire
. - Kesinlikle ihlal DIP değil Dependency Injection ile karıştırılmamalıdır -. - çünkü sadece beton modülleri ithal edebiliyorum.
- Muhtemelen ihlal OCP'yi - örneğin, o dosya sistemine yazma (aracılığıyla bir günlük modülü olduğunu düşünün
fs
modülü). Bu günlük modülünü ağa göndermek üzere genişletmek istersem çok zor olurdu.
* Bu, çoğunlukla kullanıcı ülkesinde uygulandığı için CommonJS veya AMD modülleriyle birlikte çalışabilir. Ancak, bunun ES6 import
sözdizimi ile nasıl mümkün olabileceğinden emin değilim .
Bağımlılık Enjeksiyonu
Bağımlılık enjeksiyonunu kullanarak, daha fazla olurdu:
module.exports = function doSomethingWithRequest(someModule) {
// do stuff
someModule.someFunc()
// do other stuff
}
Avantajları
- Arttırılmış test edilebilirlik:
someModule
ES6 sözdizimini kullanıyor olsanız bile, şimdi saplama / alay etmek kolaydır . - O var mümkün zorunlu olmamakla birlikte, istemci modülü hala uygulanması ve bir arabirimi değil programlanabilir gibidir: DIP onurlandırmak için.
Dezavantajları
- Kırık kapsülleme: kalan asıl soru:
Tamam, o zaman bağımlılıkları kim yaratacak / gerektirecek?
- Bunu yaparken modülün her müşterisinde WET görünüyor .
- Bu muhtemelen gerçek bir projede uygulanabilir olması için bir DI Konteyner kullanmamı gerektiriyor.
Yani, buradaki asıl soru şudur:
Javascript geliştiricileri neden ilk yaklaşıma eğilimli?
Bu sadece "Javascript yolu" mu?
Ben çoğu zaman böyle kod yazarım. Alaycı kütüphaneleri kullanarak test kurulum payımı aldım, ancak bunu yapmak her zaman yanlış hissettirdi.
Bir şey mi eksik?