Newsgroup: it.comp.lang.javascript
Titolo: Evitare variabili globali

Ciao a tutti,
mi sono definito una classe che istanzio 3 volte in una pagina web,
ho la necessita' di richiamare i riferimenti degli oggetti in punti
diversi del codice,
cosa mi consigliate come alternativa alle variabili globali?
Ciao



Di dare una *buona* lettura ai Design Pattern che ti ho già
consigliato a suo tempo.
Queste sono domande alle quali puoi rispondere benissimo da
solo, dato che i DP nascono per rispondere a questo tipo di
esigenze; e per evitare che gli sviluppatori s'inventino la
ruota ogni sacrosanta volta.
Nello specifico, andrebbe visto la tipologia della "classe"
(ricordati che JS non ha classi) in questione, il perché si
istanzia tre volte (sempre e solo tre?) e in che contesto.
Avendo bene in mente lo scopo che vuoi raggiungere e questi
dettagli, puoi cercare i pattern più idonei al problema.
Ma te lo dico subito.. non è mia intenzione riaffrontare di
nuovo l'argomento, in quanto l'ultimo thread che si è avuto
è stato a mio avviso abbastanza esaustivo, e si è protratto
per un bel po'. Quello che avevo da suggerirti, te l'ho già
suggerito all'epoca: adesso sta a te.
-- 
~ Se potete leggere questo, la mia donna è caduta.
(Letta sul retro di una maglietta di un motociclista)

 o mi stai diventandomi completamente paranoico? ;-DDD
Oddio: "paranoico", proprio non vedo cosa c'azzecchi. Piuttosto
"con qualche turba mentale", dai. :D
Tornando un attimo seri: alla fin fine è un po' come mettersi a
fare il "Sudoku". E poi, non ti ricordi tutti quei discorsi sul
codice che deve essere bello da vedere oltre che funzionale? In
pratica il concetto di fondo è lo stesso anche qua. Ovviamente,
con le dovute differenze del caso. ;)


 dettagli, puoi cercare i pattern più idonei al problema.
Allora ho pensato di fare così:
per una sorta di retrocompatibilità, ho lasciato il mio oggetto iniziale
invariato e poi mi sono creato un'altro bel oggettino singleton che funge
da raccoglitore con una lazy initialization insieme ad un factory method.
In definitiva io associo facoltativamente una stringa che identifica
l'istanza del mio oggetto e la richiamo/creo attraverso un metodo
dell'altro oggetto raccoglitore:
var o = ObjList.getInstance( null, 'ist1' );
direi che comunque sia non dovrebbe essere malaccio, anzi credo di aver
fatto un buon lavoro - chiaramente verro' smentito subito, in caso
contrario credo proprio che adotterò questo metodo...
ne posto una versione riassunta:
function Obj( params )
{
//...
}
//...
var ObjList = (function()
{
   var istancesList = { };
   return new function( )
   {
//    this.constructor = null;
      this.getInstance = function( params, istanceId )
      {
         var instance = null;
         if( ! layerObj )
         {
            alert( 'Attenzione! Parametro non valido...' );
         }
         else
         {
            if( typeof istanceId == 'string' ||
               typeof istanceId == 'undefined' )
            {
               if( typeof istanceId != 'undefined' &&
                  typeof istancesList[istanceId] == 'object' )
               {
                  instance = istancesList[istanceId];
               }
               else
               {
                  instance = new Obj( layerObj );
                  instance.constructor = null;
                  if( typeof istanceId == 'string' && istanceId )
                     istancesList[istanceId] = instance;
            }
            else
            {
               alert( "Attenzione! Parametro non valido..." );
            }
         }
         return instance;
      }
   }
})( );
Che ne dici?

 Che ne dici?
Che indubbiamente rispetto all'altro post le cose son cambiate ma non
stai ugualmente seguendo i DP a modo, né quello che ti ho detto.
E come ti ho già scritto non è mia intenzione riaffrontare nuovamente
l'argomento per i motivi citati nel precedente post. Quindi se tu sei
soddisfatto così, ben venga, il codice è tuo. Ma non tirarmi addentro
la questione. :)


 stai ugualmente seguendo i DP a modo, né quello che ti ho detto.
:(
eh, lo sapevo
Vabbe', ciao

 non riuscirci :(
Invece, alla fine, hai sempre dimostrato il contrario.
-- 
~ Io sono il più importante dei miei problemi.


"Evitare variabili globali"
   se si tratta di un singolo oggetto, ora ho chiaro che devo usare il pd
   singleton, nel caso di più istanze dello stesso, forse la "lazy factory"
   ma manco ne sono sicuro e tu per altro ti sei già espresso...
"Oggetto XHR"
   Un vero incubo, in cui ancora oggi, non ne sono venuto a capo del tutto
   e non sono stato in grado di capire quale fosse l'approcio più sicuro ed
   elegante
"Tabelle molto grosse"
   Per il momento ho adottato un metono che non permette un "molto"
   particolarmente elevato, chissa'
....
Vabbe' cmq, piano piano
E' sempre interessante e utile "parlare" qui, magari ogni tanto 2 righe di
codice non le disdegnerei per niente, cmq...
Ciao e grazie

 anche più di me, che vabbe' non dico altro...
Direi che con questo abbiamo concluso la discussione.
-- 
~ "Accadono cose che sono come domande.
Passa un minuto, oppure anni e poi la vita risponde." (A. Baricco)