Problemi di progetto da un principiante Java

2

Una settimana fa ho fatto la domanda; Primo grande progetto, come iniziare. Crea menu, salva su hard disk ecc. . Ho provato a fare tutto senza fare una GUI con Swing ma ho capito che per ogni vista che volevo presentare all'utente dovevo fare una nuova lezione. In questo momento ho 3 classi di menu (il MainMenu, computerCategoryMenu, laptopCategoryMenu) mi sono fermato perché avrei bisogno di fare altre 6 classi di menu e poi un altro 6 se l'utente ha registrato e un altro 6 per l'amministratore del sito. Non mi sembra giusto. Inoltre tutto sembra troppo statico per me. Non so come fare ad aggiungere o eliminare prodotti dall'amministratore.

Devo memorizzare tutti i miei prodotti in una mappa di hash e quindi farli visualizzare in diversi menu? Pensi che fare una GUI con Swing renderà le cose molto più semplici?

    
posta captain 10.08.2011 - 15:23
fonte

4 risposte

1

Sembra che tu sia uscito un po 'dai binari. Dovresti avere una singola classe di menu. Periodo, fatto.

Nella tua applicazione avrai una sorta di barra dei menu / contenitore che contiene tutti i menu di cui hai bisogno. Ecco alcuni pseudo-codice approssimativi

Menu mainMenu = new Menu();
Menu computerCategoryMenu = new Menu();
mainMenu.setTitle("Main");
computerCategoryMenu.setTitle("Computer Category");
mainMenu.addItem("Exit");

E qualsiasi altra cosa hai bisogno per i menu. Se hai bisogno di leggere i nomi da un file, sarebbe più dinamico, ma dovresti ottenere l'idea.

    
risposta data 10.08.2011 - 15:54
fonte
0

In ogni caso, sì, per questo tipo di applicazione dovresti scrivere una GUI. Dalla descrizione del tuo problema, sembra che tu debba avere un solo menu chiamato "Prodotti" con due voci di menu, uno per sfogliare l'elenco di prodotti e l'altro per aggiungere un nuovo prodotto. Ora, non sai duplicare i menu per ogni "ruolo utente" nella tua applicazione. È necessario abilitare / disabilitare il menu, le voci di menu, i pulsanti e le finestre e tutti gli elementi grafici di "azione" in base al ruolo o ai ruoli dell'utente. Ad esempio, solo se è un amministratore, abiliti l'azione che consiste nel "aggiungere / modificare / rimuovere" i prodotti. Tuttavia, tutti gli utenti sono in grado di sfogliare l'elenco dei prodotti. Ma, davvero, questa è la punta del tuo iceberg qui ...

Indipendentemente dai problemi della GUI, sospetto che abbiate un altro problema importante in quanto non si dispone di un database. Hai scritto sulla memorizzazione dei tuoi prodotti in una HashMap, ecco perché sono sospettoso. Ora puoi farla franca con una HashMap solo se la serializzi / deserializzi da qualche parte in un file, ma questa è solo una soluzione (molto) veloce e sporca per concentrarti sulla codifica della GUI.

Inoltre, un problema ancora più grande ... Dato che stai parlando di diversi ruoli utente, sospetto anche che persone diverse debbano usare l'applicazione nello stesso momento. In tal caso sarà necessario disporre di un database per connettersi e archiviare / recuperare le informazioni dell'utente. Non sarai in grado di raggiungere questo obiettivo con semplici hashmap. Dai un'occhiata a come dovrebbe essere eseguita un'applicazione multilivello in teoria . Anche le applicazioni molto semplici e rapidamente scritte prendono questo approccio.

Infine, controlla il seguente link dove hanno fornito un esempio di implementazione dell'architettura MVC, utilizzando Java SE: link . Tutto il codice sorgente è a tua disposizione per capire rapidamente come funziona.

ps: puoi fare tutto ciò in un'applicazione desktop, ma anche in un'applicazione web ... Forse hai prima un'altra decisione da prendere qui?

    
risposta data 11.08.2011 - 13:03
fonte
0

It doesn't look right to me.

Prima di tutto, di solito quando non sembra giusto è perché non lo è. Dovresti sempre cercare di rendere il tuo codice intuitivo per gli altri. Hai mai provato a cambiare il codice di qualcun altro e hai lamentato che tutto è un disastro? Beh, è perché il programmatore stava solo programmando per lui. Quando si scrive il codice si dovrebbe cercare di rendere chiaro per tutti gli altri ciò che stai cercando di realizzare. E questo di solito significa scegliere il giusto livello di granularità e scegliere i nomi giusti per classi, metodi, variabili, pacchetti e così via.

Should I store all my products in a hashmap and then get them to show in different menus?

Se archivi tutti i tuoi prodotti su una mappa di hash puoi trovarli facilmente con qualche chiave. Quello è buono. Ma è tutto ciò di cui hai bisogno? Potrebbe essere necessario trovarli per categoria, per nome, per ordinarli, specificare i rapporti tra loro e così via. Quindi la mia ipotesi sarebbe che dovresti avere una classe di prodotti con tutte queste operazioni comuni come interfaccia pubblica. Scommetto che lo troverai molto più semplice da implementare perché tutto è incapsulato in un unico luogo, e devi solo pensare a una singola operazione, spiacevolmente, alla volta. Ricorda: le clases devono SEMPRE essere specialisti. Tenerlo breve e semplice. Personalmente mi piace il principio di programmazione spartano.

Do you think that doing a GUI with Swing will make things much easier?

No, qualunque problema tu stia avendo in questo momento potrebbe scomparire cambiando il modo in cui leggi l'input dell'utente, ma ne troverai di nuovi. La mia ipotesi è che stai facendo troppo in ciascuna delle tue classi di menu. Invece di creare una nuova classe per ogni caso d'uso e riempire tutto all'interno. Penso che dovresti avere una singola classe che fa riferimento agli oggetti di business e che delega loro il vero lavoro a seconda dell'input dell'utente. Ricorda: le clases devono SEMPRE essere specialisti. Chiediti, qual è il punto di questa classe di menu? Bene, se si tratta di un menu, allora si tratta solo di scegliere quello che voglio, e basta. Semplice come quella. Lascia che qualcun altro faccia il vero lavoro.

    
risposta data 09.09.2011 - 00:15
fonte
-1

Sì, fare un'interfaccia utente complessa sarà più facile in Swing rispetto alla riga di comando. Ma devi mostrare altro codice se vuoi aiuto con il design.

    
risposta data 10.08.2011 - 15:49
fonte

Leggi altre domande sui tag