2017-10-11 3 views
0

Comment le code JS doit être structré lors de l'instanciation de nouvelles classes dans la classe de contrôleur Main.Créer une classe avec des arguments ou appeler ses méthodes séparément

Solutions:

A: passer des arguments tout en créant une nouvelle classe - new Options(args) - et laissez-constructeur de Options appeler ses propres méthodes. B: crée une nouvelle classe et appelle les méthodes des classes sur l'objet.

Plus tard j'utiliserais les propriétés de Options dans d'autres classes.

// A 
class Main { 
constructor(options) { 
    this.options = new Options(options); 

    { firstProperty, secondProperty } = this.options; 
    this.another = new Another(firstProperty, secondProperty); 
    } 
} 

// B 
class Main { 
constructor(options) { 
    this.options = new Options(); 
    const firstProperty = this.options.methodA(options); 
    const secondProperty = this.options.methodB(options); 

    this.another = new Another(); 
    const anotherPropety = this.another.methodA(firstProperty); 
    (...) 
    } 
} 
+0

Les deux codes ne semblent pas équivalents. dans B, vous ne copiez pas les deux propriétés dans 'this.another'. Aussi, est-ce que "this.other" devrait être "this.another"? – Barmar

+0

Ils sont équivalents, je devrais ajouter 'etc ...'. Maintenant, c'est «un autre» seulement, c'était une erreur, merci de l'avoir repéré. –

Répondre

0

Pour les besoins du découplage, je suggère une troisième option. Ceci permet d'injecter vos dépendances dans une classe donnée, ce qui rend les tests d'écriture pour votre code beaucoup plus simples. Il vous donne également l'avantage de (à condition que vous mainteniez une interface commune) échanger Options pour NewAwesomeOptions à un moment ultérieur sans avoir à trouver partout où vous pourriez avoir codé en dur dans une classe.

+0

Ainsi, 'Main' aurait accès à toutes les méthodes de' Options'. Le fichier 'example.js' est maintenant un controller/dispatcher. J'ai besoin d'un objet central qui initialise de nouveaux objets, en leur passant les propriétés nécessaires d'autres objets - comme votre 'example.js'. –

+0

À peu près oui, cela repose sur les principes de [inversion de contrôle] (https://en.wikipedia.org/wiki/Inversion_of_control) et [injection de dépendance] (https://en.wikipedia.org/wiki/Dependency_injection). En pratique, il aide à découpler les parties de votre code afin que les parties puissent être plus interchangeables, ce qui est utile pour tester le moqueur et améliorer la réutilisabilité et l'extensibilité du code. –