Java FX: deklarativ gegenüber prozedural

9

Ich habe einen Hintergrund in Web-based Programmierung (PHP, JSF, ...) und minimalen Hintergrund mit Swing und swt.

Momentan schaue ich mir java fx 2.x für eine neue Desktop-Anwendung an und ich frage mich, wie man die eigentliche GUI bauen könnte. Ich könnte die deklarative Route mit fxml gehen oder ich könnte die prozedurale Route gehen. Momentan mache ich für ein schnelles Prototyping das letztere, aber ich frage mich, ob es zwingende Gründe für die Verwendung von fxml gibt.

AKTUALISIEREN

Am Ende habe ich die FXML-Route für ein Projekt durchschnittlicher Größe genommen und obwohl die Szene-Builder-Beta auf meinem Linux-System immer noch etwas instabil ist, hat sie sich dem ursprünglichen prozeduralen Prototyp als deutlich überlegen erwiesen. Der bei weitem größte Vorteil ist, dass viele Elemente (vor allem hbox, vbox, labels, tabs, ...) meinen Code nicht mehr stören, da sie nur in der fxml existieren.

    
nablex 23.04.2013, 05:40
quelle

4 Antworten

13

Oracle-Empfehlungen

Siehe den Oracle-Hinweis:

  1. Warum verwenden Sie FXML
  2. Implementieren von JavaFX Best Practices

Oracle empfiehlt FXML für die Layoutdefinition über die Java API.

Alternate Declarative Technologies für JavaFX

Die anderen deklarativen Elemente in JavaFX sind CSS und 3D-Modelle

Eine semi-deklarative Methode ist die JavaFX Builder API , aber Sie sollten dies unter Umständen vermeiden, da das Builder-API in künftigen JavaFX-Versionen .

Zusätzlich wird bei der Programmierung in anderen Sprachen eine deklarative domänenspezifische Sprache (DSL) für die JavaFX-Entwicklung eingebettet (z. B. ScalaFX oder GroovyFX ).

Im Allgemeinen hat die Verwendung der deklarativen Syntax hauptsächlich die prozedurale Programmierung für die Mehrheit der UI-Markup-Aufgaben gewonnen. Dies wird durch die Bekanntheit von Technologien wie HTML, CSS, FXML, XAML, MXML, XUL usw. deutlich.

Low-Level-Programmierung

Für Low-Level-Aufgaben wie das Entwickeln eines benutzerdefinierten JavaFX-Steuerelements, das Bearbeiten eines JavaFX-Canvas oder das Verarbeiten von Bilddaten ist das prozedurale Java-API am besten geeignet, statt deklaratives FXML zu verwenden - keines der JavaFX-Codebasis in openjfx verwendet FXML.

Persönliche Auswahl und Beratung

Am Ende gibt es hier keine richtige Antwort. Die Entscheidung bleibt dem Entwickler überlassen, welchen Ansatz er am besten findet.

Es gibt auch keinen Grund, warum Sie die beiden Stile nicht so kombinieren können, wie Sie es für richtig halten. Die Verwendung eines direkten deklarativen Ansatzes führt zu einer sehr starren Benutzeroberfläche (wie einer statischen HTML-Seite) im Vergleich zu etwas, das sowohl prozedurale als auch deklarative Ansätze (z. B. html + javascript + ajax) mischt - und das gilt auch für JavaFX für HTML-Entwicklung in diesem Fall.

Bei kleinen Programmen schreibe ich einfach etwas Code in die IDE, kompiliere und führe es aus, ohne mich um den Kontextwechsel zwischen XML-basiertem FXML und Java-Code kümmern zu müssen. Aber ich habe festgestellt, dass dieser prozedurale Ansatz sich nicht einfach auf größere Projekte skalieren lässt. Die Aufteilung der Ansicht in FXML hilft, die Trennung von Bedenken und Modularisierung zu erzwingen. Es ist viel zu einfach, diese Sicht- und Logikprobleme ohne die künstliche Trennung, die FXML verlangt, zu vermischen.

Ich mag XML als Benutzeroberfläche-Layoutsprache nicht wirklich. Ich denke, das jetzt nicht mehr existierende FXD-Format aus dem veralteten JavaFX 1.x-Zweig war weit überlegen. FXML ist jedoch die am einfachsten zugängliche und am häufigsten verwendete deklarative UI-Syntax für JavaFX 2.

Ich verwende CSS mit JavaFX-Programmen sehr oft und benutze es sowohl mit deklarativem FXML-Code als auch mit prozeduralem Java-API-Code. Meiner Meinung nach ist es mindestens genauso wichtig, den Stil vom Code zu trennen, als das Layout vom Code zu trennen.

Wenn Sie CSS verwenden, sollten Sie Ihre Stile immer in ein separates Stylesheet einfügen, anstatt die Stile in Code einzubetten.

Wie bereits in einer anderen Antwort erwähnt, funktioniert das Visual Design Tool von JavaFX SceneBuilder derzeit nur mit FXML. Abgesehen von anderen Dingen ist dies Grund genug für viele Benutzer, ihre JavaFX-Benutzeroberfläche mit FXML zu definieren.

    
jewelsea 23.04.2013, 23:04
quelle
2

Mein Grund für die Verwendung von fxml ist, dass es vom Szenen-Generator erzeugt werden kann. Ich möchte nicht Layouts von Hand geifern ...

    
Kai 23.04.2013 07:14
quelle
2

Wenn Sie das Layout (FXML) vom Anwendungscode trennen, ist die Chance höher, dass Sie einige UX-Leute bitten, nur mit dem SceneBuilder am Layout zu arbeiten, anstatt eine ganze IDE zu benötigen.

    
Puce 23.04.2013 08:50
quelle
1

Trotzdem ist SceneBuilder noch nicht vollständig genug, um damit zu arbeiten. Wir müssen zu FXML in der Hand für Details zurückkehren, und das ist nicht gut.

Und ein paar kleine Fehler im SceneBuilder mit großer und detaillierter FXML-Datei.

Oracle muss SceneBuilder für JavaFX-Integrität aktualisieren! Weil es sehr gut aussieht!

    
darkomen 17.05.2013 08:11
quelle

Tags und Links