Come iniettare un collaboratore che ha bisogno di un riferimento per la schiena in un costruttore

0

Seguendo il consiglio di Hevery di iniettare collaboratori nel costruttore piuttosto che cose nuove all'interno del corpo del costruttore, come farlo con grazia quando un collaboratore ha bisogno di un riferimento al suo proprietario, senza usare un metodo "init" malvagio (un'altra violazione del meglio di Hevery pratiche per il codice verificabile).

es.

    export class Model {
    constructor( history ) {
      this._history = history; // But history needs to know Model too
      history.model = this;    // Is it just as simple as this? Feels awkward
      ...
    }
    ...
   }

vs.

    export class Model {
    constructor() {
      this._history = new History(this); // But new'ing things here reduces testability
      ...
    }
    ...
   }
    
posta user2132190 23.03.2018 - 23:49
fonte

2 risposte

0

Penso che questo sia un caso in cui devi solo new up: crea l'istanza nel costruttore. Se le due cose non possono esistere l'una senza l'altra e non è necessario utilizzare il polimorfismo, non ha senso passare la dipendenza in.

Altrimenti è necessario interrompere la dipendenza circolare tra Modello e Cronologia.

    
risposta data 23.03.2018 - 23:54
fonte
3

È possibile iniettare una factory anziché un'istanza:

export class Model {
    constructor(HistoryFactory factory) {
      this._history = factory.createHistory(this);
      ...
    }
    ...
}

Ma immagino che Misko ti consiglierebbe di liberarti della dipendenza circolare.

    
risposta data 24.03.2018 - 00:24
fonte

Leggi altre domande sui tag