2016-04-11 18 views
0

Projelerimden birine Bağımlılık Enjeksiyonu (DI) kullanmak istiyorum.DI tasarım challange, örnekler oluşturan sınıf

let pixels = di.getInstance('pixels'); 

veya bir ekleme parametre ile

let pixeks = di.getInstance('pixels', [arrayOfPixels]); 

Ben sorun: Ben

let di = new DI(); 
di.register('screen', Screen); // contract name, class ref 
di.register('pixels', Pixels); 

aşağıdaki Ve aşağıdaki gibi örneklerini oluşturabilir olarak temelde çalışan bir temel DI lib yazdım şimdi Ekran sınıfı ile:

export default class Screen() { 
    getPixels() { 
     // Get pixels from a canvas 
     return new Pixels(pixels); 
    } 
} 

Screen sınıfı, Pixels örneklerini oluşturur. Bu DI ile uyumlu değil, bu yüzden bu sorunu nasıl doğru bir şekilde çözebilirim. Yardımcı olabilecek bir tasarım deseni varsa lütfen bana bildirin!

cevap

1

fabrika/DI konteyner enjekte bağımlılık olacaktır Bunu yapmanın yolu:

export default class Screen() { 
    constructor(di) { 
     this._di = di; 
    } 

    getPixels() { 
     // Get pixels from a canvas 
     return this._di.getInstance('pixels', [pixels]); 
    } 
} 

Ancak: aşırıya kaçmayın. DI yararlı ve gerekli, ancak "yumuşak kod" her şey ve her şeyi sonsuza yapılandırılabilir anlamına gelmez anlamına gelmez. Sınıfınız, birbiriyle yakından ilişkili başka bir sınıfın örneklerini döndürecek şekilde tanımlanmışsa ve bağımlılık enjeksiyonu için gerçek bir gereksinim yoksa, sınıfların hiçbiri "yapılandırma" gerektirmez veya tamamen değiştirilemez;

+0

Cevabınız için çok teşekkürler. Benim için DI'nin temel nedeni, birim testlerimde bağımlılıkları alay etmektir. –

+0

'Pixels' *, alay gerektiren bir şey yapar mı? Varsa: evet, DI. Değilse: tekrar, aşırıya kaçmayın. – deceze

+0

tamam, tavsiye için çok teşekkürler! –