Tutte le funzioni dovrebbero essere completamente autonome (è una cattiva pratica condividere una variabile tra le funzioni)?

2

Ci sono due modi per fare la stessa cosa (pseudo codice)

  1. Definisci databaseHandle nella funzione padre e usalo come globale in questo ambito:

    function API() {
    
      function openDatabase() {
          return databaseHandle;
      }
      databaseHandle = openDatabase() 
    
      function getItem(i) {
          databaseHandle.get(i)
      }
    
      function addItem(name) {
          databaseHandle.add(name)
      }
    
    }
    
  2. Definisci una funzione per ottenere questo handle, e poi prendilo quando ne abbiamo bisogno:

    function API() {
    
      function openDatabase() {
          return databaseHandle;
      }
    
    
      function getItem(i) {
          databaseHandle = openDatabase()
          databaseHandle.get(i)
      }
    
      function addItem(name) {
          databaseHandle = openDatabase()
          databaseHandle.add(name)
      }
    
    }
    

La prima opzione sembra più semplice, e la vedo in molti esempi. Ma il secondo mi sembra più affidabile e ovvio in quello che fa (e un po 'ridondante).

Qual è la migliore pratica qui? Se c'è un altro, un modo migliore, mi piacerebbe sentirne parlare. Grazie.

    
posta CodeVirtuoso 08.05.2015 - 12:13
fonte

1 risposta

2

Mi piacerebbe andare con il secondo approccio, con una modifica che rilascia l'handle al termine. Se ogni metodo si prende cura di ottenere, gestire e rilasciare il proprio handle, allora l'applicazione dovrebbe essere più adatta per adattarsi (assumendo che si abbia una sorta di raggruppamento sotto).

Con il primo approccio, è difficile dire cosa succederà se due thread diversi chiamano ciascun metodo separatamente nello stesso momento.

    
risposta data 08.05.2015 - 12:27
fonte