04/01/17 15:32
lumo
Visto che probabilmente hai studiato i design pattern, uno che puoi usare per rappresentare la connessione è un singleton che per tutta la durata del programma mantenga aperta la connessione al database (quindi mantiene quella variabile conn e le altre riguardanti alle credenziali al suo interno).
Altrimenti crei l'oggetto connessione nel main del tuo programma e poi lo rendi un parametro del costruttore di tutte le classi che lo richiedono. Questo è molto migliore di un singleton perché così le dipendenze sono esplicite nel codice, eventualmente permette di fare mock testing.
In ogni caso il tuo codice è vulnerabile a SQL injection, se fosse un servizio esposto via web sarebbe un bel problema.
In ogni caso ho letto la traccia e non mi è del tutto chiaro quello che devi fare. Suppongo che il software debba avere due interfacce, una usata dai camerieri per vedere quali ordini sono stati mandati, magari quanto tempo serve al loro completamento in base alla categoria dei prodotti nell'ordine (?) e così via.
Se fosse un sistema vero però servirebbe anche un'interfaccia visibile alla cucina. Se per semplicità assumiamo che gli ordini vengano sempre accettati appena ricevuti e abbiano un tempo esatto di svolgimento, l'interfaccia è inutile perché il comportamento dei cuoci è deterministico ed è sufficiente la parte dei camerieri.
Se invece si vuole simulare in modo più veritiero il tutto, man mano che si accumulano gli ordini, gli ultimi andrebbero messo "in attesa" perché è possibile fare solo un numero massimo di preparazioni in un certo tempo.
In questo caso l'interfaccia per la cucina serve, perché il cuoco segnala ai camerieri se l'ordine è stato preso oppure no. Volendo, si può anche rilassare il determinismo e simulare un tempo random per la preparazione, in quel caso serve anche un modo per dire quando l'ordine è pronto e deve essere azionato dalla cucina.
Non mi è chiaro che ruolo abbiano l'amministratore e la categoria dei prodotti.
Considerato il tutto comunque, non penso valga la pena utilizzare un database, siccome non hai bisogno di fare query complesse sui dati ma sempicemente inserirli o rimuoverli (per quanto riguarda la coda degli oridini). Userei alcuni file di testo con un formato semplice in cui a ogni riga corrisponde una informazione.
Inoltre, hai scritto una classe per popolare il database però nella traccia non è chiaro se i camerieri e le categorie siano già presenti nel database (caso in cui puoi inserirle tu manualmente, ad esempio in dei file come dicevo prima). Semplificherebbe notevolmente il lavoro, anche perché come vedi hai già una sql injection nelle prime righe di codice che hai scritto :P
Altrimenti crei l'oggetto connessione nel main del tuo programma e poi lo rendi un parametro del costruttore di tutte le classi che lo richiedono. Questo è molto migliore di un singleton perché così le dipendenze sono esplicite nel codice, eventualmente permette di fare mock testing.
In ogni caso il tuo codice è vulnerabile a SQL injection, se fosse un servizio esposto via web sarebbe un bel problema.
In ogni caso ho letto la traccia e non mi è del tutto chiaro quello che devi fare. Suppongo che il software debba avere due interfacce, una usata dai camerieri per vedere quali ordini sono stati mandati, magari quanto tempo serve al loro completamento in base alla categoria dei prodotti nell'ordine (?) e così via.
Se fosse un sistema vero però servirebbe anche un'interfaccia visibile alla cucina. Se per semplicità assumiamo che gli ordini vengano sempre accettati appena ricevuti e abbiano un tempo esatto di svolgimento, l'interfaccia è inutile perché il comportamento dei cuoci è deterministico ed è sufficiente la parte dei camerieri.
Se invece si vuole simulare in modo più veritiero il tutto, man mano che si accumulano gli ordini, gli ultimi andrebbero messo "in attesa" perché è possibile fare solo un numero massimo di preparazioni in un certo tempo.
In questo caso l'interfaccia per la cucina serve, perché il cuoco segnala ai camerieri se l'ordine è stato preso oppure no. Volendo, si può anche rilassare il determinismo e simulare un tempo random per la preparazione, in quel caso serve anche un modo per dire quando l'ordine è pronto e deve essere azionato dalla cucina.
Non mi è chiaro che ruolo abbiano l'amministratore e la categoria dei prodotti.
Considerato il tutto comunque, non penso valga la pena utilizzare un database, siccome non hai bisogno di fare query complesse sui dati ma sempicemente inserirli o rimuoverli (per quanto riguarda la coda degli oridini). Userei alcuni file di testo con un formato semplice in cui a ogni riga corrisponde una informazione.
Inoltre, hai scritto una classe per popolare il database però nella traccia non è chiaro se i camerieri e le categorie siano già presenti nel database (caso in cui puoi inserirle tu manualmente, ad esempio in dei file come dicevo prima). Semplificherebbe notevolmente il lavoro, anche perché come vedi hai già una sql injection nelle prime righe di codice che hai scritto :P
Ultima modifica effettuata da lumo 04/01/17 15:34
aaa