Domanda OOP di base per un rapporto

2

Sto sviluppando un progetto di esempio in Android per il telefono di un amico che tiene traccia delle sue vendite. All'inizio, uno dei requisiti era creare rapporti annuali di questi dati di vendita. Questo sarebbe roba come settimana più redditizia, totale per trimestre, totale al mese, e anche totale annuale, così come i confronti per gli anni precedenti (circa 10 cose in totale).

Ho creato una classe chiamata YearlyReport che ha tutte queste proprietà e vengono popolate da una classe di database che effettua le chiamate SQL appropriate.

Questi dati vengono visualizzati su una pagina di statistiche, ma dopo aver visto questo, il mio amico mi ha chiesto di dare allo spettatore la possibilità di selezionare settimane diverse e di visualizzare anche dati settimanali (3 bit di informazione: il totale per la settimana, il giorno migliore nella settimana, il peggior giorno della settimana). Così, mentre cambiano le settimane dell'anno, vuole vedere i dati settimanali sopra i dati annuali.

Quindi ora ho bisogno di fare query specifiche sui dati settimanali, ma anche di visualizzare dati annuali. Mi sento davvero disorganizzato per qualche motivo! All'inizio ho creato un oggetto WeeklyReport, e il database dirà "ok per una determinata settimana W, riempirò il tuo oggetto WeeklyReport e lo restituirò". Poi ho iniziato a chiedermi se dovevo fare qualcosa di più intelligente. Forse combinare qualcosa? Dovrebbe esserci ereditarietà? Mi manca qualcosa.

Va bene avere un oggetto WeeklyReport e YearlyReport? Dovrei combinarli? Se lo faccio, è ancora strano perché il rapporto annuale non cambia molto a meno che non ti sposti ad un nuovo anno (non spesso), ma il settimanale lo fa (a seconda della data).

    
posta NullHypothesis 05.03.2014 - 05:25
fonte

2 risposte

3

Perché non crei solo una classe in cui specifichi la data intervalli come parametro? Non conosco il tuo modello di dati, ma suppongo che non farà alcuna differenza nel codice se passi start_date=1/1/2014 , end_data=31/12/2014 o end_data=07/012014 per il tempo di valutazione?

strong di questo approccio, è necessario un elenco di parametri aggiuntivo che descriva gli "intervalli aggregati" (ad esempio, se si desiderano informazioni sul mese migliore o peggiore, gli intervalli sono i 12 mesi dell'anno, se si desiderano informazioni circa il giorno migliore o peggiore della settimana, devi solo passare i 7 giorni della settimana specificata).

Ciò che rimane è calcolare e passare i parametri corretti alla classe per un rapporto settimanale o annuale, ma suppongo che ciò potrebbe essere fatto da due semplici funzioni, solo usando quella classe Report .

    
risposta data 05.03.2014 - 07:52
fonte
1

I feel really disorganized for some reason!

Ti senti disorganizzato perché stai provando a progettare OO ma a costruire le tue lezioni sui dati, non sul comportamento.

Qual è il comportamento di WeeklyReport e YearlyReport? Sembrano semplicemente contenere dati, che non sono un oggetto.

Pensa al sistema come a una raccolta di piccole persone che parlano tra loro e si dicono cosa fare. Non conosco appieno i requisiti, ma suppongo che se lo farai non avrai un sacco di persone per ogni tipo di rapporto, dato che farebbero tutti la stessa cosa.

Si potrebbe finire con una persona chiamata "reporter" o "costruttore di report" e un "report" che può presentarsi. Se il tuo codice software fosse un piccolo ufficio con un sacco di piccole persone che avrebbero fatto il rapporto annuale? Come avrebbe fatto la relazione annuale. Con chi avrebbe parlato per costruire il rapporto annuale? Come la persona presenterà il rapporto annuale (metafora per la visualizzazione sullo schermo) ea chi?

Tutte queste domande ti porteranno a un design OO appropriato che è molto più facile da gestire rispetto ad avere una tonnellata di oggetti di report per ogni tipo di report che potresti produrre.

    
risposta data 05.03.2014 - 15:58
fonte