Come faccio a rifattorizzare un ciclo che fa aggregazione mentre si fa il lavoro normale?

1

Che cosa dovrei fare

Sto lavorando su un'API, in cui ottengo un elenco di oggetti dall'output di una query SQL utilizzando un ORM. Ora questa chiamata API deve inviare le seguenti informazioni al client.

L'output è composto da un elenco e un dizionario. L'elenco contiene dizionari che contengono dati statistici al giorno. Un dizionario per ogni giorno.

Il dizionario contiene aggregati di tutti i dati statistici nello stesso periodo di tempo insieme a uno stato che indica quanto il valore è sceso o in aumento a seconda dell'aggregato dei precedenti N giorni precedenti agli attuali N giorni richiesti.

Implementazione corrente

Quindi, ho ricevuto una richiesta di dati per gli ultimi N giorni. Ho recuperato gli ultimi 2 giorni di dati dal database. In loop sul risultato e mentre preparavo i dati secondo l'API se i dati erano per gli ultimi N giorni. Mentre il ciclo era attivo, ho continuato a creare dati aggregati per i N giorni precedenti e N giorni correnti per il calcolo della modifica.

Una volta che il ciclo è finito, ho creato il dizionario con aggregato corrente e la modifica per stat.

Qual è il problema?

La funzione è troppo grande. Posso separare il processo in due funzioni, ma poi dovrò ripetere il ciclo dei dati. Come faccio a garantire che il codice appaia sano e refactored senza influire sulle prestazioni.

    
posta Amogh Talpallikar 04.09.2015 - 11:20
fonte

1 risposta

3

Quando hai un grosso loop che muta anche lo stato, il modo per refactarlo è creare un oggetto metodo . È un oggetto di una nuova classe i cui campi corrispondono a tutti gli stati locali disordinati che ora stai mantenendo mentre iterano nel ciclo.

    
risposta data 04.09.2015 - 11:25
fonte

Leggi altre domande sui tag