Utilizzo di MVC in un'app Java


10

Ho bisogno di scrivere un'applicazione GUI multipiattaforma per elaborare (in più thread) e visualizzare quantità abbastanza grandi di dati. Idealmente l'applicazione dovrebbe essere relativamente veloce e avere un bell'aspetto.

L'interfaccia dell'app sarà composta da un widget tabella, un widget albero e un widget disegno figura personalizzato. L'utente sarà in grado di modificare i dati da uno di questi widget e le modifiche dovrebbero essere immediatamente riflesse negli altri widget.

Naturalmente, sto pianificando di utilizzare MVC. Tuttavia, normalmente eseguo tutta la mia programmazione GUI in C ++ / Qt e ho un'esposizione molto limitata a Java. Quindi apprezzerei davvero ogni consiglio su come organizzare una simile app in Java. In particolare, dovrei usare Swing o JavaFX? Quali widget sceglieresti per il lavoro? Potresti consigliare libri / tutorial online che trattano questi aspetti della piattaforma Java?

Apprezzerò molto qualsiasi feedback. Grazie!

(questa domanda è stata originariamente pubblicata su StackTranslate.it , ma questo sito è stato suggerito come un luogo più appropriato per chiederlo)

Risposte:


21

Tutto ciò è molto soggettivo poiché più tecnologie diverse saranno in grado di soddisfare le tue esigenze.

Come altri, probabilmente consiglierò semplicemente la tecnologia che personalmente preferirei per un progetto del genere, che sarebbe JavaFX .

I motivi per cui consiglierei JavaFX sono:

OK, immagino che quanto sopra sia un po 'tangente, ma mi piace promuovere JavaFX ;-)

Ad ogni modo, per affrontare i punti specifici della tua domanda:

  • JavaFX è un framework GUI multipiattaforma (attualmente Mac / Windows / Linux).
  • JavaFX ha un supporto integrato per il threading multiplo di alta qualità (il framework principale stesso è a thread singolo come quasi ogni altra piattaforma GUI là fuori, ma è possibile definire le proprie attività da eseguire contemporaneamente dal thread GUI in modo che il thread GUI rimanga reattivo).
  • Un programma JavaFX ben scritto non dovrebbe avere problemi a funzionare abbastanza bene da visualizzare quantità abbastanza grandi di dati. Ecco un esempio di progetto JavaFX che lo fa.
  • La possibilità di modellare l'applicazione tramite CSS, utilizzare effetti visivi e animazioni, ti consente di lavorare con i designer per rendere la tua app eccezionale o farlo da solo se ne hai le competenze.
  • JavaFX ha un TableView e un TreeView che puoi usare. C'è anche un controllo combinato TreeTable che è stato sviluppato in preparazione per la versione Java 8 .
  • Il widget personalizzato per il disegno di figure potrebbe utilizzare forme di grafici di scene o un'area di disegno diretta : è davvero solo una questione di stile e preferenze di codifica.
  • Le proprietà e le funzionalità di associazione di JavaFX abbinate ai suoi framework di listener di eventi rendono banale la modifica dei dati usando un controllo e le modifiche si riflettono immediatamente in altri controlli.
  • Per lo sviluppo dello stile MVC, puoi scrivere il tuo modello usando semplici oggetti Java, definire la tua vista usando il linguaggio di markup FXML (creato usando lo strumento di layout grafico di SceneBuilder se lo desideri) e definire la tua logica di controllo in Java (o un altro linguaggio di scripting se preferisci) , inoltre dovresti separare il tuo stile dalla tua logica usando i CSS.
  • Dato che hai un'esposizione limitata a Java, la curva di apprendimento sarà significativa. Ci sono eccellenti tutorial Java oltre ai tutorial JavaFX che ho collegato in precedenza che possono aiutare con questo. Il codice core JavaFX utilizza solo le funzionalità disponibili nel JDK, quindi per utilizzare JavaFX non è necessario apprendere molte librerie e framework aggiuntivi (come se si stesse imparando JavaEE, ad esempio). Quindi quei due siti tuotorial forniscono la maggior parte delle informazioni necessarie per essere sempre aggiornati.
  • Per l'organizzazione di app, se hai un'applicazione complessa e hai bisogno del supporto di un framework completo e collaudato per l'applicazione client e non ti dispiace fare un sacco di apprendimento extra, puoi incorporare JavaFX in Eclipse RCP o NetBeans RCP , che, secondo alle loro pagine potrebbero farti risparmiare anni di tempo di sviluppo. Consiglierei di guardare tali piattaforme solo se le tue esigenze lo giustificano, perché per progetti di piccole e medie dimensioni, sarà probabilmente più semplice codificare le cose direttamente in JavaFX senza i complessi framework di piattaforme client come Eclipse e NetBeans.
  • Se dovresti usare Swing o JavaFX, non sono proprio la persona più obiettiva a rispondere a questo. JavaFX ha sicuramente delle carenze che ti risulterebbero appena inizi a usarlo (come fa Swing).
  • Per i tutorial online, ho collegato a quelli più pertinenti. C'è un bel tutorial impostato per un'app completa .
  • I libri Pro JavaFX 2 e JavaFX 2.0 Introduction by Example sono molto apprezzati.

Grazie per questa fantastica risposta! JavaFX sembra sicuramente una piattaforma dolce e sicuramente investirò molto tempo in essa. Inoltre entrambi i libri che mi hai consigliato sono disponibili nella mia biblioteca :)
esempio il

1
Quel link "migliori IDE al mondo" dovrebbe davvero puntare a IntelliJ IDEA;) Ottima risposta, molto istruttiva, grazie!
Cooper

1
Va notato che JavaFX attualmente non ha alcun supporto per l'accessibilità. Questo può essere un grosso problema per alcuni (è stato per me) e dovrà continuare a utilizzare Swing.
Cooper,

JavaFX ora fornisce supporto per l'accessibilità. Questa funzionalità è stata fornita in Java 8u40, per la quale è stato implementato JEP 204: JavaFX Accessibility .
jewelsea,

5

Utilizza invece un modello Model-view-presenter . È possibile visualizzare un buon esempio MVP in Swing qui tramite il progetto mvp4j .

Pur non essendo Swing, darei anche un'occhiata agli articoli MVP sul sito GWT Google Developers per ulteriori approfondimenti su questo modello e su come applicarlo in Java; gli stessi principi di progettazione sono indipendenti dal framework e GWT è molto simile a Swing.

Una rapida descrizione di come funziona MVP:

  • Visualizza : una classe che contiene rigorosamente i componenti della GUI. Nessuna consapevolezza della logica o del modello, nemmeno i gestori di eventi. Questo rende le viste molto stupide, ma molto usa e getta e modificabili.
  • Presentatore : una classe che gestisce la logica dell'applicazione. Un relatore si assocerà a una (o più) classi di vista e gestirà tutta la logica dell'applicazione e il controllo del modello necessari.
  • Modello : oggetti del modello dati. È meglio mantenerli il più possibile simili a POJO (semplici vecchi oggetti Java).

Se implementato correttamente, MVP renderà la tua applicazione molto disaccoppiata e ti consentirà di apportare modifiche senza disturbare altre aree dell'applicazione.

Modifica: in base alla tua decisione di utilizzare JavaFX, ti consiglio di consultare i seguenti articoli


Grazie! Penso di aver deciso di utilizzare JavaFX, ma leggerò informazioni su MVP e su come può essere utilizzato con questa piattaforma.
egor

1
Grande! Se decidi di utilizzare il modello MVP, ecco un link che fornisce un esempio nel codice JavaFX.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper

2

I widget richiesti sono disponibili in Swing o SWT . La documentazione contiene esempi di componenti (Swing) o widget (SWT), quindi sarà abbastanza facile identificarli.

Swing è una libreria GUI inclusa in JDK e costruita da zero. SWT è esterno e i componenti sono basati su quelli nativi.

Per quanto riguarda MVC, entrambi hanno il supporto per questo. In Swing hai un modello per ogni componente che fornisce praticamente i dati sottostanti. Il componente stesso è sia la vista che il controller.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.