Originariamente inviato da perseoclub
Immagina che nella giornata ho 10 pazienti:
ognuno con delle richieste di esami (test clinici)
Questi test possono essere richiesti sia su ricetta medica, che da privato (senza ricetta)... Quindi un paziente può aggiungere alla sua accettazione sia analisi da ricette che non.
In sostanza io pensavo di creare una mappatura di tutte le analisi richieste, suddivise per paziente, e suddivise per ricetta medica.
La ricetta medica mi serve perché in ogni ricetta non possono esserci più di 8 analisi convenzionate.
Per quanto riguarda la memorizzazione interna, la cosa che mi viene in mente ora è questa. Hai una classe chiamata Analisi che definisce una singola anlisi. Una classe chiamata ad esempio AnalisiPaziente, che contiene un array (array list) di Analisi. Una classe Ricetta che estende AnalisiPaziente. In questo modo, la classe Ricetta contiene le proprie informazioni, e grazie all'ereditarietà avrà le proprie Analisi (quelle appunto scritte sulla ricetta).
Un altro aspetto comodo, è che in un oggetto AnalisiPaziente puoi memorizzare un oggetto Ricetta. Quindi:
codice:
Analisi a1 = new Analisi(.....);
Analisi a2 = new Analisi(......);
AnalisiPaziente ap = new Ricetta(a1, a2);
Ora ti chiederai come distingui gli oggetti AnalisiPaziente (quindi quelli privati, senza ricetta) da quelli con Ricetta, visto che li posso memorizzare in uno stesso riferimento (la superclasse). Fortunatamente è molto semplice, è sufficiente utilizzare l'operatore instanceof.
codice:
if(ap instanceof Ricetta) {.... }
restituisce true se ap è un oggetto di tipo Ricetta.
Detto questo, ad ogni paziente abbini un oggetto AnalisiPaziente, che racchiude le analisi del paziente. Li abbini sia che queste siano AnalisiPaziente, sia che si tratti di Ricetta. Per l'abbinamento, potresti avere la classe Paziente con al suo interno:
codice:
ArrayList<AnalisiPaziente> elencoAnalisi = new ArrayList<AnalisiPaziente>();
ogni elemento dell'array può quindi essere o AnalisiPaziente o la sua superclasse Ricetta.
Per mostrarli a video, la scelta sta a te. Puoi far scegliere un paziente, mostrare i dati anagrafici ed a lato mostrare l'elenco di Analisi e Ricette. Se le vuoi suddividere (magari in due liste distinte) sarà sufficiente controllare se quell'oggetto dell'array è AnalisiPaziente o Ricetta (e lo controlli con instanceof; quindi se è true, lo casti a quell'oggetto).
La mappatura globale mi sarebbe utile quando alla degli inserimenti di tutti i pazienti della giornata, grazie a dei cicli, potrei rifare velocemente il calcolo degli incassi, oppure la stampa di una fattura, oppure se devo verificare ecc. ecc., oppure rivedere tutte le analisi dei giorni precedenti ancora pendenti...
Potresti tenere in memoria tutti i pazienti della giornata, ma devi valutare bene la situazione. Se i pazienti possono essere molti, è forse più conveniente effettuare una ricerca nel database, magari in base alla data della giornata e ricavare tutti i pazienti, piuttosto che tenerli in memoria, in quanto per un oggetto Paziente ci sono una serie piuttosto numerosa di informazioni; inoltre i "report" se così posso definirli, li vedrai appunto a fine giornata...quindi perchè caricare continuamente il software con dati che vedrò dopo 8 ore?
Queste sono idee delle 23.30, non è escluso che pensandoci un po', non mi vengano soluzioni migliori o più corrette, specie nella gestione delle ricette e delle analisi.