Sto lavorando all'interno di un framework Javascript + BackboneJS (un framework MVC) + RequireJS, ma questa domanda è in qualche modo OO generica.Iniezione delle dipendenze rispetto alle dipendenze gestite rispetto all'oggetto globale
Vorrei iniziare spiegando che in Backbone, le vostre opinioni sono un mix di Vista e controller tradizionali, ed i vostri modelli HTML sono i tradizionali Visualizzazioni MVC
tormentando la mia testa su questo per un po 'e io sono non sono sicuro di quale dovrebbe essere l'approccio giusto/pragmatico.
Ho un oggetto Utente che contiene le preferenze dell'utente (come sistema di unità, selezione della lingua, qualsiasi altra cosa) da cui dipende molto codice.
Alcune delle mie viste eseguono la maggior parte del lavoro senza l'uso di modelli (utilizzando librerie di terze parti, come le librerie Mapping and Graphing) e, come tali, hanno una dipendenza dall'oggetto Utente per occuparsi della conversione delle unità, per esempio. Attualmente sto usando RequireJS per gestire questa dipendenza senza rompere troppo l'incapsulamento.
Alcune delle mie viste funzionano da sole e trasmettono solo i dati del modello ai miei template/template di template, che svolgono il lavoro e hanno una dipendenza dall'oggetto User, ancora, per cose come la conversione delle unità. L'unico modo per passare questa dipendenza al modello è iniettarlo nel modello e passare il modello nel motore di template.
La mia domanda è: come gestire al meglio una dipendenza così necessaria? - Creare un riferimento a livello di applicazione/oggetto globale accessibile ovunque? (YUK) - Utilizza le dipendenze gestite da RequireJS, anche se generalmente è consigliabile utilizzare solo il caricamento delle dipendenze gestite per le definizioni di classe/oggetto piuttosto che gli oggetti concreti. - O, usa sempre l'iniezione di dipendenza e passa manualmente tale dipendenza in tutto ciò che ne ha bisogno?
Per quello che vale, è possibile trovare alcuni ottimi modelli per mitigare questo problema utilizzando i differenziali per sedersi di fronte a variabili globali commutabili che potrebbero essere modificate in modo asincrono –