Oppure

Loading
03/01/17 14:14
WildBlood
Salve a tutti e buon inizio anno, vorrei avere un consiglio per quanto riguarda lo sviluppo di un software per la gestione di ordini in un ristorante. Nella traccia che mi è stata consegnata mi si chiede di utilizzare almeno due design pattern noti. In pratica abbiamo i seguenti requisiti:
1. Abbiamo n camerieri e m tavoli, che sono identificati con codice univoco,
2. Ogni cameriere prende la ordinazioni e le manda al reparto cucina o a quello delle bevande, in base a ciò che è stato ordinato,
3. I prodotti tutti sono divisi per categorie,
4. Ci sono due tipi di utente: Cameriere e Amministratore, che possiedono privilegi diversi,
5. Bisogna simulare anche i tempi per la preparazione di un ordine.

Voi quali Design Pattern usereste ? Ringrazio anticipatamente tutti quelli che risponderanno.
Inoltre, se avete consigli di altro genere su come sviluppare l'applicazione, ovviamente sono ben accetti.
aaa
03/01/17 16:12
Goblin
Posta così la domanda la prima risposta che mi viene in mente è: un "Observer" e un "Chain of Responsibility", ma sarebbero riduttivi, volendo si possono utilizzare almeno una decina di pattern.
Il mio consiglio è: prendi carta e penna (o quello che sei più comodo) e inizia a fare uno schema di come strutturare il tuo software, scrivi le classi e come interagiscono tra di loro e vedrai che i pattern vengono fuori da soli.
G.
Ibis redibis non morieris in bello
03/01/17 16:26
WildBlood
Postato originariamente da Goblin:

Posta così la domanda la prima risposta che mi viene in mente è: un "Observer" e un "Chain of Responsibility", ma sarebbero riduttivi, volendo si possono utilizzare almeno una decina di pattern.
Il mio consiglio è: prendi carta e penna (o quello che sei più comodo) e inizia a fare uno schema di come strutturare il tuo software, scrivi le classi e come interagiscono tra di loro e vedrai che i pattern vengono fuori da soli.
G.


Grazie mille, farò così come dici. Inoltre, dovrei usare o un database, oppure dei file, per la gestione dei camerieri, dei tavoli e dei prodotti. Io avevo pensato di utilizzare un database, in particolare MySQL, andrebbe bene ? Inoltre, la connessione ad un Database va bene solamente per applicazioni web oppure anche per applicazioni standalone ?
Ultima modifica effettuata da WildBlood 03/01/17 16:33
aaa
03/01/17 21:28
Goblin
Per quanto riguarda MySQL in versione Embedded (StandAlone) non so se hanno continuato lo sviluppo, ma basta dare uno squardo nel sito ufficiale mysql.it/.
Una precisazione, MySQL è un server DBMS SQL e può essere usato per qualsiasi tipo di applicazione, basta installare il server e i driver per la connessione usata; dunque se vuoi usare MySQL installi il server e poi con Java, C++, Delphi, C# o quello che vuoi, ti connetti e usi la base dati SQL che MySQL ti mette a disposizione come meglio credi.
A questo punto mi sorge spontanea una domanda, ma il tuo software come evolve ? Nel senso, è solo un esercizio didattico e/o accademico per implementare i design pattern, oppure potrebbe essere visto in modo più amplio ?
Nel primo caso io, personalmente, farei solo delle classi persistenti di dati che non hanno nessuna base (al massimo dei file di testo per inizializzare un minimo di magazzino), e mi focalizzerei più sulla gestione dello scambio informazioni tra clienti-camerieri-cuochi.
Se invece hai intenzione di costruire un software che oltre un esercizio accademico ha anche uno sviluppo concreto e con i vari crismi MCV e designer pattern, allora puoi iniziare a pensare ad una base dati solida (MySQl, SQL-Server, ... altro ..), e a questo punto il giochino si fa interessante, ci vuole una vera e propria pianificazione e programmazione del lavoro e un attenta gestione nella costruzione di interfacce e classi.
G.
Ibis redibis non morieris in bello
03/01/17 21:36
lumo
Se è solo un programma didattico sqlite è molto più indolore di mysql, salva il database in un file e non devi perdere tempo a configurare un server sql, che non è una gran difficoltà ma visto che hai già altri problemi a cui pensare...
aaa
03/01/17 22:24
WildBlood
Postato originariamente da WildBlood:

Postato originariamente da Goblin:

Posta così la domanda la prima risposta che mi viene in mente è: un "Observer" e un "Chain of Responsibility", ma sarebbero riduttivi, volendo si possono utilizzare almeno una decina di pattern.
Il mio consiglio è: prendi carta e penna (o quello che sei più comodo) e inizia a fare uno schema di come strutturare il tuo software, scrivi le classi e come interagiscono tra di loro e vedrai che i pattern vengono fuori da soli.
G.


Grazie mille, farò così come dici. Inoltre, dovrei usare o un database, oppure dei file, per la gestione dei camerieri, dei tavoli e dei prodotti. Io avevo pensato di utilizzare un database, in particolare MySQL, andrebbe bene ? Inoltre, la connessione ad un Database va bene solamente per applicazioni web oppure anche per applicazioni standalone ?


In pratica è un progetto d'esame, quindi non so, mi consigliate di usare un file di testo per immagazzinare le informazioni oppure di usare sqlite (che a quanto ho capito, è comunque un file di testo) ?
Per quanto riguarda lo scambio di informazioni tra clienti-camerieri-cuoco come lo implementereste ?
Inoltre, dovrei a questo punto sviluppare una classe per "cliente".
aaa
03/01/17 23:09
Goblin
mmm forse mi sono spiegato male, mi scuso, forse ho usato una terminologia errata..... allora..
io ho detto di usare delle classi persistenti, ossia classi che leggono le informazioni da un db (business-logic), in questo caso, da un file di testo e dunque usarle in maniera unidirezionale e non bidirezionale, ossia non salvano niente, ti servono solo per implementare la business-logic, lumo ha detto di usare SQLite al posto di MySQL, il quale è si un file di "testo", ma con la potenza delle query SQL, dunque di implementare la business-logic con le classi persistenti con SQLite.
Per lo scambio di informazioni, esiste appunto un design pattern "Observer", il quale è delegato alla notifica dello scambio di informazioni, questo in accoppiata al pattern "Chain of Responsibility" dovrebbe fare quello che chiedi, l'implementazione, mi spiace ma con java non vado molto d'accordo ... passo la palla.
G.
Ibis redibis non morieris in bello
03/01/17 23:45
WildBlood
Postato originariamente da Goblin:

mmm forse mi sono spiegato male, mi scuso, forse ho usato una terminologia errata..... allora..
io ho detto di usare delle classi persistenti, ossia classi che leggono le informazioni da un db (business-logic), in questo caso, da un file di testo e dunque usarle in maniera unidirezionale e non bidirezionale, ossia non salvano niente, ti servono solo per implementare la business-logic, lumo ha detto di usare SQLite al posto di MySQL, il quale è si un file di "testo", ma con la potenza delle query SQL, dunque di implementare la business-logic con le classi persistenti con SQLite.
Per lo scambio di informazioni, esiste appunto un design pattern "Observer", il quale è delegato alla notifica dello scambio di informazioni, questo in accoppiata al pattern "Chain of Responsibility" dovrebbe fare quello che chiedi, l'implementazione, mi spiace ma con java non vado molto d'accordo ... passo la palla.
G.


Assolutamente, non volevo il codice Java (sarebbe stato come barare :rotfl: ), in ogni caso capisco cosa intendi, nel frattempo che attendevo la risposta, l'h sviluppato con MySQL, e questo è il codice che ne è venuto fuori per la classe popolaCamerieri:

package damariomain;

import java.sql.*; 

public class popolaCamerieri {
    public void aggiungiCameriere(int codiceCameriere) { 
        Connection conn = null; 
        Statement stmt = null; 
        
        try {
            Class.forName(JDBC_DRIVER); 
            
            // Connessione al database. 
            System.out.println("Connessione al database..");
            conn = DriverManager.getConnection(DB_URL, USER, PASS); 
            System.out.println("Connessione riuscita..");
            
            System.out.println("Inserimento dei dati..");
            stmt = conn.createStatement(); 
            
            // Inserimento dei dati. 
            String sql = "INSERT INTO camerieri " + "VALUES (" + codiceCameriere + ")";
            stmt.executeUpdate(sql); 
            System.out.println("Operazione eseguita con successo..");
        } catch (SQLException  se) {
            se.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    conn.close(); 
                } 
            } catch (SQLException se) {}
            
            try {
                if (conn != null) {
                    conn.close(); 
                } 
            } catch (SQLException se) {
                se.printStackTrace(); 
            }
        }
    }
    
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://localhost/daMario"; 
    static final String USER = "root"; 
    static final String PASS = "rootpassword"; 
}



La cosa che non riesco a fare, ma che vorrei fare è delegare la connessione al database ad un'altra classe, solo che non mi riesce.
aaa