A quale stadio di un progetto Java si configurano i componenti della GUI?

-1

Ho bisogno di un piccolo consiglio con la progettazione del progetto. Ho intrapreso un progetto personale per migliorare la mia conoscenza di Java Swing, integrazione API, JDBC e OOP

Ho scelto di farlo in Java perché in precedenza avevo fatto un progetto simile in HTML e JSP e ho imparato molto.

Per coloro che sono interessati, ecco una ripartizione dell'App

Dalla home page dell'app:

Un amministratore può fare clic su Accedi

  • Inseriscono nome utente e PW (chiamata database)
  • Una volta effettuato l'accesso, è possibile aggiungere, visualizzare o eliminare utenti (chiamate al database)
  • Possono quindi disconnettersi (tornare alla schermata iniziale dell'app)

Un utente può fare clic per accedere

  • Una volta effettuato l'accesso, possono visualizzare il prezzo delle azioni di un titolo (chiamata API)
  • Possono aggiungere uno stock al proprio portafoglio (chiamata al database)
  • Possono rimuovere uno stock dal proprio portafoglio (chiamata al database)
  • Possono visualizzare il loro portafoglio corrente (chiamata al database)
  • Possono quindi disconnettersi (tornare alla schermata iniziale dell'app)

Come non ho mai programmato così in Java prima, qual è la strada migliore da percorrere?

  1. Devo prima progettare tutti i componenti della GUI e poi creare la funzionalità attorno a questo? o la mia app funziona dalla console e quindi creare la GUI?
  2. Dovrei provare a implementare una sorta di framework? Non ho usato Frameworks prima quindi la curva di apprendimento che immagino sarà ripida
  3. Devo implementare un tipo di architettura? Conosco la teoria dietro MVC come ho usato nel progetto Restful JSP. Ma dato che questo progetto è troppo complicato, forse non ne ho bisogno.

Apprezza i tuoi pensieri e tutti gli altri aspetti del design che pensi dovresti pensare, faccelo sapere.

    
posta Kevin 29.06.2017 - 13:12
fonte

4 risposte

0

is it better practice to create GUI components and then create the functionality or better to have the program working before adding buttons and windows?

In questo caso stai solo sviluppando, ma se ci fossero più persone questo potrebbe facilmente accadere contemporaneamente. Non è giusto o sbagliato fare l'uno prima dell'altro.

Risposta: domande specifiche

Should I design all the GUI components first and then build the functionality around this? or have my app working from the console and then create the GUI ?

Se per "lavorare dalla console" intendi scrivere una CLI, quindi no, non penso che sia un buon approccio in questo caso. IMO che sarebbe un lavoro non necessario e la scrittura di codice che in definitiva non è necessario.

A parte questo, non c'è una risposta corretta alla domanda di scrivere prima l'UI o no. Se segui un buon modello di progettazione potresti facilmente scrivere un'interfaccia utente che non fa ancora nulla (o prendere in giro l'interazione con il database). Sullo stesso token è possibile scrivere prima tutto il codice di accesso ai dati senza un'interfaccia utente e, con alcuni test di unità, verificare che il codice del database funzioni prima di scrivere l'interfaccia utente.

Should I try implement some sort of framework ? I haven't used Frameworks before so the learning curve i imagine will be steep

Forse? Dipende da ciò che stai cercando di realizzare. Se vuoi imparare un quadro specifico, allora usalo con tutti i mezzi. Se decidi di utilizzare un framework specifico, assicurati che sia adatto alle tue esigenze e che non lo stai utilizzando semplicemente perché qualcuno ha detto che dovresti.

Should I implement an architecture type? I know the theory behind MVC as i used in the JSP Restful project. But as this project inst overly complicated, maybe I don't need to.

MVC (o MVP, ecc.) è certamente un buon modello che potresti seguire. Dici che il progetto non è eccessivamente complicato, ma potresti essere sorpreso di quanto codice si finisce per scrivere e di come la complessità cresce rapidamente! Seguire un buon schema può aiutarti a mantenere i bug modulari, leggibili, manutenibili e facili da individuare.

Ri: "pensieri e altri aspetti del design"

Altalena

Se stai cercando di apprendere una struttura dell'interfaccia utente che sarebbe utile andare avanti, starei lontano da Swing e utilizzare JavaFX invece.

Altre

Consiglierei di prendere questo progetto un pezzo alla volta: creare un'interfaccia utente non funzionante e scrivere il codice di accesso ai dati separatamente prima di collegare tutto insieme. Ciò ti aiuterà a concentrarti su un aspetto e ad assicurarti di prendere buone decisioni di progettazione (e magari seguendo uno schema come MVC, MVP, ecc.) Su quel livello. Naturalmente potresti dover apportare delle modifiche in un secondo momento, ma non così tante come se provassi a fare tutto in una volta: ciò diventa complicato in fretta!

Quando inizi ogni fase, considera prima la creazione delle interfacce. Ad esempio, quando scrivi il codice di accesso ai dati, chiediti "Di quali interazioni ho bisogno e cosa mi aspetto in cambio?" Quindi crea alcune interfacce con metodi come addUser() , deleteUser() , addStock() , removeStock() , ecc. A seconda di ciò che ti serve. Quindi puoi creare implementazioni specifiche della tua interfaccia a seconda della tecnologia utilizzata (ad esempio un database SQL, MySQL, ecc. Ecc.). Lo stesso vale per l'interfaccia utente (implementazioni per lo specifico framework utilizzato) e per effettuare chiamate API per recuperare i prezzi delle azioni (implementazione per la specifica API utilizzata). Ciò fornisce la flessibilità per lo scambio di una struttura dell'interfaccia utente, una tecnologia di database o un'API di magazzino.

Infine, considera la pubblicazione su Revisione codice una volta che hai qualcosa che funziona! Sembra che il tuo obiettivo qui sia quello di imparare, e avere altre persone che criticano il tuo codice è un ottimo modo per imparare!

    
risposta data 29.06.2017 - 21:07
fonte
0

Questo è il classico problema del modello di visualizzazione del modello (vedi questo articolo di Wikipedia ). Personalmente il modo in cui lavoro è quello di fare piccoli pezzi del modello prima della vista. Poi, una volta che ho un set funzionante di strutture dati, creo una piccola vista per quelle. Quindi aggiungo al modello e aggiungo alla vista. Ripeto questo schema fino a quando tutto è fatto. Penso che una delle cose più importanti che ho imparato nei miei progetti (principalmente Java) sia che le visualizzazioni sono molto fluide e spesso hanno bisogno di cambiare. Pertanto, è meglio definire un'interfaccia per la vista a cui la vista può accedere in modo da poter "inserire" diverse viste se è necessario in futuro. Per questo motivo, seguendo lo schema MVC di solito si ottiene un codice più malleabile perché è possibile modificare le viste (e il controller) secondo necessità.

    
risposta data 30.06.2017 - 19:55
fonte
0

Se hai una specifica molto solida che non cambierà molto, ad esempio un progetto (teorico) "a cascata", allora la creazione della GUI in ritardo ha senso.

In un progetto "agile" o in cui sospetti che le specifiche siano instabili e le parti interessate cambino le cose, scrivi una finta GUI in anticipo e spesso. Questa "GUI" potrebbe essere semplice come schizzi su schede. Non preoccuparti di ottenere tutti i pixel e di lavorare sulle funzionalità di base.

    
risposta data 13.09.2017 - 02:36
fonte
0

Preferisco uno sviluppo approfondito che abbia realizzato un traiettoria totale, un'applicazione funzionante e poi l'aggiunta di funzionalità. Senza alcune misure questo potrebbe facilmente essere il ricettario per un disastro. Quindi faccio quanto segue:

  • Guarda prima uno o più campioni dimostrativi e crea un'applicazione per giochi, senza troppa struttura! Ciò consente di vedere il flusso e i meccanismi coinvolti. Swing utilizza gli ascoltatori, in parte sui modelli, per determinare le modifiche, JavaFX utilizza una proprietà, che racchiude un valore e ha il proprio listener di modifiche. JafaFX è più scivoloso dello swing. Ci vuole un po 'più di apprendimento, e non vorrei iniziare con FXML in cima.
  • Quindi inizia con un prototipo pulito di solo una parte della funzionalità.

Questa dovrebbe essere una prima pietra miliare veloce. Se ancora nessun sistema di controllo versione, iniziare con uno: git o mercurial sono facili. Integrazione in IDE SonarLint o SpotBugs.

  • Sviluppa test guidato ; con test unitari per sviluppare un modello di dati e quasi-algebriche operazioni sul modello. Questo è un modo veloce per creare scenari, testare dati e ideare ciò che si desidera ottenere: tutte le funzionalità dell'applicazione.
  • La progettazione del database, entità ora dovrebbe essere un gioco da ragazzi. Il modello di dati dovrebbe già essere lì. Si noti che per JPA (Java Persistence API), come eclipseLink, la progettazione del database (con annotazioni) è integrata dall'inizio. E per Test Driven Development si potrebbe iniziare con un database H2 integrato.
  • Progettazione GUI incrementale ora è possibile aggiungere funzionalità alla GUI. A volte paga ancora iniziare con un prototipo è un'applicazione separata, se qualcosa di complesso come una tabella richiede molta sperimentazione.

Should I design all the GUI components first and then build the functionality around this? or have my app working from the console and then create the GUI?

Puoi realizzare prototipi; a swing JTable ha bisogno di un TableModel, un JavaFX potrebbe trarre vantaggio da una ObservableList e l'integrazione di un modello di dati più astratto potrebbe risultare più semplice. Comunque preferisco l'optimum classico: algoritmi + strutture dati , nello sviluppo basato su test. Ciò motiva un buon concetto che vale oro. Tuttavia, anche il design della GUI è funzionante: pensando a un'importazione Excel di un elenco, si potrebbe anche pensare di importare un elenco copiato negli appunti. Intelligenza, elenca diversi modi (componenti) di selezione della sincronizzazione.

Should I try implement some sort of framework? I haven't used Frameworks before so the learning curve i imagine will be steep

L'uso di un quadro potrebbe trasformarsi in un vicolo cieco e nascondersi troppo. Ma può anche essere un nuovo livello di astrazione, aprendo un nuovo mondo. L'API Java Persistence, ad esempio nel nuovo eclipseLink, potrebbe essere una mappatura O / R, con molti aspetti. In generale, la creazione di un framework non varrebbe la pena aprirla. Ma potrebbe essere una forma di modularizzazione: separare l'uso specifico per un obiettivo aziendale, dal puro codice GUI. Come creare una combobox di testo di completamento automatico per uso generico piena di dati del dominio aziendale.

Should I implement an architecture type? I know the theory behind MVC as I used in the JSP Restful project. But as this project inst overly complicated, maybe I don't need to.

Separare il modello di dati, il controller e la vista è vantaggioso. Ma per visualizzare una lista, il codice non dovrebbe mai essere fatto esplodere in modo burocratico: ust una classe di controller (servlet) che carica localmente la lista (modello di dati) dal database, inoltrandola a una vista (JSP) presentandola piacevolmente. Qui la vista non ha bisogno di sapere del suo controller come in MVC completo. E l'elenco non ha bisogno di essere una classe Model.

Vale la pena menzionare un altro aspetto: documentazione . Usando package-info.java per documentare come le classi combaciano (testo breve). Documentazione di testo in stile leggibile per la logica aziendale, casi d'uso e così via. Persino il beneficio di una singola persona quando un progetto viene messo da parte per un periodo più lungo. Non esitare a scrivere perché hai preso scorciatoie, lasciato fuori alcune funzionalità e così via.

Il più importante: persistere nel consegnare il progetto. Un progetto consuma e produce energia: trovare un set di icone costa tempo, ma avere motivazioni belle icone. Di qui la mia prima pietra miliare per avere un'applicazione iniziale funzionante e per aggiungere funzionalità in modo incrementale.

    
risposta data 12.12.2017 - 12:42
fonte

Leggi altre domande sui tag