Provenendo da C ++ originariamente e vedendo molti programmatori Java fare lo stesso, abbiamo portato gli spazi dei nomi in JavaScript. Vedi la biblioteca di chiusura di Google come esempio in cui hanno uno spazio dei nomi principale, goog
e sotto che molti altri spazi dei nomi come < a href="http://docs.closure-library.googlecode.com/git/namespace_goog_async.html"> goog.async , goog.graphics
Ma ora, dopo aver imparato lo stile AMD di richiedere moduli sembra che gli spazi dei nomi siano praticamente inutili in JavaScript. Non solo inutile ma anche discutibilmente un anti-modello.
Che cos'è AMD? È un modo di definire e includere moduli che rimuovono tutte le dipendenze dirette. Effettivamente lo fai
// some/module.js
define([
'name/of/needed/module',
'name/of/someother/needed/module',
], function(
RefToNeededModule,
RefToSomeOtherNeededModule) {
...code...
return object or function
});
Questo formato consente al codice di supporto AMD di sapere che questo modulo ha bisogno di name/of/needed/module.js
e name/of/someother/needed/module.js
caricato. Il codice AMD può caricare tutti i moduli e quindi, supponendo che non ci siano dipendenze circolari, chiamare la funzione define
su ciascun modulo nell'ordine corretto, registrare l'oggetto / funzione restituita dal modulo mentre li chiama e quindi chiamare qualsiasi altro modulo ' define
funzione con riferimenti a quei moduli.
Questo sembra rimuovere qualsiasi necessità per gli spazi dei nomi. Nel tuo codice puoi chiamare il riferimento a qualsiasi altro modulo tutto ciò che desideri. Ad esempio, se si dispone di 2 librerie di stringhe, anche se definiscono funzioni simili, purché seguano il pattern AMD, è possibile utilizzarle facilmente nello stesso modulo. Non c'è bisogno di spazi dei nomi per risolverlo.
Significa anche che non ci sono dipendenze hard coded. Ad esempio, nella chiusura di Google qualsiasi modulo potrebbe fare riferimento direttamente a un altro modulo con qualcosa come var value = goog.math.someMathFunc(otherValue)
e se sei sfortunato funzionerà magicamente dove, come con lo stile AMD, dovresti includere esplicitamente la libreria matematica altrimenti il modulo non avrebbe un riferimento ad esso in quanto non ci sono globali con AMD.
Oltre a questa dipendenza, l'iniezione per i test diventa facile. Nessuno del codice nel modulo AMD fa riferimento a elementi per namespace, quindi non ci sono percorsi di namespace con hardcoded, puoi facilmente prendere in giro le classi al momento del test.
C'è qualche altro punto per gli spazi dei nomi o è qualcosa che i programmatori C ++ / Java stanno portando a JavaScript che probabilmente non appartiene veramente?