2013-04-23 17 views
8

Ho un background in programmazione web-based (php, JSF, ...) e lo sfondo minimal con swing e SWT.Java FX: dichiarativa vs procedurale

Attualmente mi sto guardando Java FX 2.x per una nuova applicazione desktop e mi chiedo sulle migliori pratiche in materia di costruire l'interfaccia grafica vera e propria. Potrei seguire la via dichiarativa con fxml o seguire la via procedurale. Attualmente per alcuni prototipi veloci sto facendo quest'ultimo, ma mi chiedevo se c'erano motivi convincenti per usare fxml.

UPDATE

Alla fine sono andato il percorso FXML per un progetto di medie dimensioni e, anche se la versione beta scena costruttore è ancora un po 'instabile sul mio sistema Linux, ha dimostrato di essere di gran lunga superiore alla prototipo procedurale originale. Di gran lunga il più grande vantaggio è che un sacco di elementi (in particolare hbox, vbox, etichette, schede, ...) ingombrare non è più il mio codice in quanto esistono solo nella fxml.

risposta

12

Oracle Raccomandazioni

Vedere il consiglio di Oracle:

  1. Why use FXML
  2. Implementing JavaFX Best Practices

Oracle non raccomandare FXML per la definizione di layout sopra l'API Java.

alternative dichiarative Tecnologie per JavaFX

Gli altri pezzi dichiarative in JavaFX sono CSS e 3D models

un metodo semi-dichiarativa è il JavaFX Builder API, ma si potrebbe voler evitare che, come the builder api will be deprecated in future JavaFX versions.

Inoltre, se si programma in altre lingue, alcuni di questi incorporano un linguaggio specifico del dominio dichiarativo (DSL) per lo sviluppo di JavaFX, (ad esempio ScalaFX o GroovyFX).

In generale l'uso della sintassi dichiarativa ha vinto soprattutto nel corso di programmazione procedurale per la maggior parte dei compiti di marcatura UI. Questo essere visto dal rilievo di tecnologie quali HTML, CSS, FXML, XAML, MXML, XUL, ecc

basso livello di programmazione

Per le attività di basso livello come lo sviluppo di un controllo personalizzato JavaFX, manipolazione di un immagine di elaborazione di tela JavaFX o dati, l'API Java procedurale è più adatto invece di usare FXML dichiarativa - nessuno dei JavaFX codebase in openjfx utilizza FXML.

scelte personali e consigli

Alla fine, non v'è alcuna risposta giusta qui. La scelta è lasciata allo sviluppatore di scegliere l'approccio che preferiscono.

Non vi è alcun motivo per cui non è possibile combinare i due stili come meglio credi. L'utilizzo di un approccio dichiarativo diretto ti lascia con un'interfaccia utente molto rigida (come una pagina html statica), rispetto a qualcosa che miscela approcci procedurali e dichiarativi (ad esempio html + javascript + ajax) - e lo stesso vale per JavaFX così com'è per lo sviluppo HTML in questo caso.

Per piccoli programmi che mi piace solo la scrittura del codice nell'IDE, compilare ed eseguire senza avere a che fare con il cambio di contesto tra FXML basato su XML e il codice Java. Ma ho scoperto che questo approccio procedurale non si adatta facilmente bene ai progetti più grandi. Avere la vista separata in FXML aiuta a rafforzare la separazione delle preoccupazioni e la modularizzazione. È fin troppo facile mescolare queste considerazioni di vista e logica senza la separazione artificiale richiesta da FXML.

Non mi piace l'XML come linguaggio di layout dell'interfaccia utente. Penso che il formato FXD ormai defunto dal obsoleto ramo JavaFX 1.x fosse di gran lunga superiore. Tuttavia, FXML è la sintassi UI dichiarativa più accessibile e ampiamente utilizzata per JavaFX 2.

Uso molto i CSS con i programmi JavaFX e mi piace usarlo sia con codice dichiarativo FXML che con codice procedurale API Java. A mio parere, è altrettanto importante separare lo stile dal codice quanto separare il layout dal codice.

Quando si utilizza il CSS, è sempre meglio mettere i propri stili in un foglio di stile separato anziché inline gli stili nel codice.

Come sottolineato in un'altra risposta, lo strumento di progettazione visiva JavaFX SceneBuilder attualmente funziona solo con FXML e, a parte tutto ciò, è una ragione sufficiente per molti a utilizzare FXML per definire l'interfaccia utente JavaFX.

2

La ragione per l'utilizzo di fxml è che può essere generato da Scena Builder. Non voglio armeggiare a mano i layout ...

2

Se stai separando il layout (FXML) dal codice dell'applicazione, la possibilità è più alta di poter chiedere ad alcuni ragazzi UX di lavorare sul layout usando il SceneBuilder solo piuttosto che richiedere loro un intero IDE.

1

Tuttavia, SceneBuilder non è ancora completo per funzionare con esso. Dobbiamo tornare a FXML nella mano per i dettagli e non va bene.

E pochi piccoli bug in SceneBuilder con file FXML grandi e dettagliati.

Oracle deve aggiornare SceneBuilder per l'integrità di JavaFX! Perché è un bell'aspetto!

Problemi correlati