Refactored a una variabile globale di fantasia?

3

Attualmente sto rifattorizzando un'applicazione che ho creato in JavaScript.
L'applicazione utilizza un'ora di inizio e un numero totale di ore di lavoro per costruire un calendario per le visualizzazioni giornaliere, settimanali e mensili. L'ora di inizio e il conteggio totale delle ore di lavoro sono uguali per tutti gli orari

Ho preso in considerazione l'utilizzo di un pattern per inizializzare l'orario e ho iniziato a leggere su come procedere nel fare ciò in Javascript perché non ho molta familiarità con la lingua. La mia funzione di inizializzazione originale per l'orario aveva la seguente firma:

FillTimeTable( startingTimeWeekDay, workinghourCountWeekDay );  

Il problema con questo metodo è che per una diversa visualizzazione dell'orario devo chiamare nuovamente le altre viste con la stessa firma.

FillWeeklyTimeTable( startingTimeWeekDay, workinghourCountWeekDay );
FillMonthlyTimeTable( startingTimeWeekDay, workinghourCountWeekDay );

Se le ore di lavoro cambiano, io o il povero bugger che mantieni il mio codice dovremmo modificarle in punti diversi all'interno del codice e, a causa del modo in cui organizzo il mio codice, non sono posizionati così bene come qui. Quindi durante il refactoring ho considerato alternative come una variabile globale, Singleton o un oggetto.

Ho letto di oggetti, membri privati e costruttori e ho deciso che questa potrebbe essere la soluzione dopo aver letto su Implementazioni Singleton e binning delle variabili globali.

Quindi attualmente ho il seguente codice:

function Timetable( startingTimeWeekDay, workinghourCountWeekday) {  
    this.startWeekday = startingTimeWeekDay;  
    this.hoursWeekday = workinghourCountWeekday;
}

Timetable.prototype.startWeekday = function() {  
    return this.startWeekday;
}

Timetable.prototype.hoursWeekday = function() {
    return this.hoursWeekday;
}

var myTimetable = new Timetable( 6, 8 );   

Fino ad ora tutto funziona bene, ma myTimetable mi sembra davvero un modo fantastico per dichiarare una variabile globale per me.

È questo il caso?

Ho appena deciso la strategia sbagliata o è questa la strada da percorrere o ho perso qualcosa di essenziale per lavorare con JavaScript?

    
posta Ben McDougall 13.08.2013 - 13:44
fonte

2 risposte

1

Se l'applicazione - o meglio l'istanza dell'applicazione in un particolare browser mentre ospita quella pagina - ha solo un senso di "ora di inizio" e un senso di "conteggio totale dell'ora lavorativa "Che condivide su se stesso, non è una cosa sbagliata avere ognuna di quelle cose rappresentate da una singola variabile nella sceneggiatura. Spargere tutto il posto sarebbe peggio.

Questo a sua volta significa che hai naturalmente delle variabili globali o un oggetto unico che detiene quello stato. Da un punto di vista teorico del modello, un oggetto unico che viene iniettato nei consumatori dell'oggetto (sia impostando una proprietà su quell'oggetto o tramite un argomento di costruzione) è il migliore, ma per le piccole applicazioni non è necessario ottenere quel complesso; variabili globali o un oggetto "ben noto" globale possono fare altrettanto bene. (Se il codice è piccolo, refactoring quando cresce non sarà un grosso problema. Se il codice è grande, si usa lo stile più elaborato per iniziare.)

    
risposta data 13.08.2013 - 21:31
fonte
3

Ti suggerisco di creare un oggetto per conservare le informazioni sulla pianificazione del lavoro, quindi passare l'oggetto alle tue funzioni Orario.

var companyXWorkSchedule = {
    "startingTimeWeekDay": 6,
    "workinghourCountWeekday": 8
};

Non è necessario creare una variabile globale. companyXWorkSchedule potrebbe essere una proprietà su un oggetto.

modifica: aggiunto il segno di uguale mancante

    
risposta data 13.08.2013 - 16:16
fonte

Leggi altre domande sui tag