K
kneitzel
Gast
Hallo zusammen,
ich bin in erster Linie Backend Entwickler, aber man bekommt ja einiges mit und nun möchte ich bezüglich JavaFX mal meine Sichtweise etwas validieren lassen (Ich beschäftige mich da derzeit etwas mit):
Was zumindest ich regelmäßig finde ist:
- fxml mit fx:id
- Im Controller dann alle Controls mit @FXML ControllType fxId
- Dann sehr viel im Code. Wenn Binding, dann wird das im Code gesetzt
Ist das nicht extrem Kontraproduktiv?
Was die Technologie ja bietet, ist das ganze Binding per fxml.
Somit kann ein Software Entwickler dann alles bauen, was fachlich benötigt wird:
- Controller mit diversen Actions - also z.B. sowas wie quitApplicationAction was klar Funktionsbasiert ist (statt sowas wie ein handleQuitButtonAction, was dann Button orientiert ist.)
- Model, welches im Controller referenziert wird und die Daten hält. Der Controller hält diese Daten nur in Form der Modell-Instanz.
Das kann dann aus meiner Sicht gut getestet werden in Unit Tests.
Und die Abhängigkeiten sind dann so aufgebaut, dass der UI Verantwortliche die UI so bauen kann, wie er möchte. Das Beenden der Applikation geht nicht über einen Button sondern dafür gibt es ein eigenes, spezielles ButtonControl? Kein Thema.Oder es gibt gar kein Button? Und das Schließen kann nur/zusätzlich über ein Menü-Punkt erfolgen? Alles kein Thema. Bindings erfolgen im @FXML und können jederzeit (ohne Code neu zu übersetzen) verändert werden.
Ich sehe das als deutlich besseres Design an aber dazu finden sich kaum Seiten und Beschreibungen (oder ich war zu blind, da was zu finden). Und wenn, dann wird es nur leicht angekratzt und es wird fast nur über andere Dinge geredet....
Ursache kann ggf. sein, dass der SceneBuilder mit sowas nicht umgehen kann. Sobald ich da also z.B. in einem Label ein
habe, steigt der SceneBuilder mehr oder weniger aus (Text Element wird leer angezeigt aber zumindest bei mir gab es ganz seltsame Verhaltensweisen ... der "Element-Katalog" auf der linken Seite wurde nicht mehr richtig angezeigt und so ... ) Die Code Elemente funktionieren sehr gut, sogar incl. Auswertung des Controllers so dass das Drop Down gefüllt ist.
Somit stellen sich mir die folgenden Fragen:
- Habe ich das mit dem vernünftigen Aufbau einer JavaFX Applikation so erst einmal richtig verstanden? Oder habe ich da jetzt etwas übersehen und es sprechen gute Gründe gegen diese strikte Aufteilung?
- Gibt es bessere GUI Tools anstelle des Scene Builders? Eine Applikation, die ein graphisches Layout incl. Bindings erlaubt?
Vielen Dank schon einmal für eure Sicht / Meinung zu diesen Punkten.
ich bin in erster Linie Backend Entwickler, aber man bekommt ja einiges mit und nun möchte ich bezüglich JavaFX mal meine Sichtweise etwas validieren lassen (Ich beschäftige mich da derzeit etwas mit):
Was zumindest ich regelmäßig finde ist:
- fxml mit fx:id
- Im Controller dann alle Controls mit @FXML ControllType fxId
- Dann sehr viel im Code. Wenn Binding, dann wird das im Code gesetzt
Ist das nicht extrem Kontraproduktiv?
Was die Technologie ja bietet, ist das ganze Binding per fxml.
Somit kann ein Software Entwickler dann alles bauen, was fachlich benötigt wird:
- Controller mit diversen Actions - also z.B. sowas wie quitApplicationAction was klar Funktionsbasiert ist (statt sowas wie ein handleQuitButtonAction, was dann Button orientiert ist.)
- Model, welches im Controller referenziert wird und die Daten hält. Der Controller hält diese Daten nur in Form der Modell-Instanz.
Das kann dann aus meiner Sicht gut getestet werden in Unit Tests.
Und die Abhängigkeiten sind dann so aufgebaut, dass der UI Verantwortliche die UI so bauen kann, wie er möchte. Das Beenden der Applikation geht nicht über einen Button sondern dafür gibt es ein eigenes, spezielles ButtonControl? Kein Thema.Oder es gibt gar kein Button? Und das Schließen kann nur/zusätzlich über ein Menü-Punkt erfolgen? Alles kein Thema. Bindings erfolgen im @FXML und können jederzeit (ohne Code neu zu übersetzen) verändert werden.
Ich sehe das als deutlich besseres Design an aber dazu finden sich kaum Seiten und Beschreibungen (oder ich war zu blind, da was zu finden). Und wenn, dann wird es nur leicht angekratzt und es wird fast nur über andere Dinge geredet....
Ursache kann ggf. sein, dass der SceneBuilder mit sowas nicht umgehen kann. Sobald ich da also z.B. in einem Label ein
text="${controller.model.greeting}"
habe, steigt der SceneBuilder mehr oder weniger aus (Text Element wird leer angezeigt aber zumindest bei mir gab es ganz seltsame Verhaltensweisen ... der "Element-Katalog" auf der linken Seite wurde nicht mehr richtig angezeigt und so ... ) Die Code Elemente funktionieren sehr gut, sogar incl. Auswertung des Controllers so dass das Drop Down gefüllt ist.
Somit stellen sich mir die folgenden Fragen:
- Habe ich das mit dem vernünftigen Aufbau einer JavaFX Applikation so erst einmal richtig verstanden? Oder habe ich da jetzt etwas übersehen und es sprechen gute Gründe gegen diese strikte Aufteilung?
- Gibt es bessere GUI Tools anstelle des Scene Builders? Eine Applikation, die ein graphisches Layout incl. Bindings erlaubt?
Vielen Dank schon einmal für eure Sicht / Meinung zu diesen Punkten.