JavaFX mit MVVM

KonradN

Super-Moderator
Mitarbeiter
Jetzt bin ich ein paar Tage doch mal sehr aktiv gewesen und habe eine alte Baustelle von mir aufgeräumt ...
Wenn ich eine Desktop Anwendung schreiben will, dann erwarte ich gewisse Dinge:
  • deklarative UI: Es kann nicht sein, dass man eine UI in Code zusammen bastelt.
  • Bindings: Ich will einmal Bindings festlegen ohne viel Code zu schreiben
  • Komponenten: Ich möchte einmal entwickeln, wie z.B. eine Entrität dargestellt wird und das dann überall verwenden können.

Das sind dann paar Anforderungen, die einen schnell zu JavaFX und auch zu MVVM führen.

JavaFX bietet schöne, deklarative URLs mit FXML und MVVM bietet eine relativ gute Unterteilung:
  • Du hast dein Model: Also einfach Deine Java Klassen / Entitäten. Nichts besonderes (!!)
  • Du hast deine View. Also eine Beschreibung, was wie dargestellt werden soll.
  • Dann kommt das ViewModel - etwas, das die Daten des Models der View präsentiert und dann auch die Fähigkeiten des Models etwas bereit stellt, was die Aktivitäten angeht ...

Und da starteten auch direkt die großen Probleme, denn hier wurde es dann notwendig, dass sehr viel Code geschrieben wird. Nichts komplexes, aber Massen an Code. Libraries wie mvvmFX haben einem etwas die Arbeit erleichtert, aber man wurde dennoch erschlagen ...

In der Praxis führte das dazu, dass Entwickler einfach ihre fxml Datei hatten und ihr Model. Und da wurde dann massiv in einem Controller code reingeklatscht. Keine saubere Trennung mehr möglich und so. Extrem blöd und für mich sehr unbefriedigend.

Da kam dann bei mir die Idee auf, dass man doch einiges automatisiert darstellen kann. Die Fähigkeiten für Bindings könnte man noch erweitern und heraus ist dann eine fx Library gekommen.

Was will man denn dann unter dem Strich haben?

Ich möchte eine Entity, also z.B. eine Person, die dann einen Namen hat.
Dann möchte ich eine View haben, die mir so eine Person anzeigen kann. Da möchte ich dann einfach ein Binding vorgeben. Sprich: Ich mache z.B. ein Textfeld mit fx:id="name" und möchte da dann sagen: Binde mir das doch bitte an name der Instanz. (Es wird also eine Instanz mitgegeben. Das kann beim Öffnen angegeben werden oder es kann über ein Binding kommen so es in einem anderen fxml angegeben wurde.)

Und wenn dann in der Oberfläche der Anwender den Namen ändert, dann ändert sich der Wert in der Entität.

Was dann natürlich noch gut wäre: Ich will das natürlich mit einem Editor machen. SceneBuilder kann das natürlich nicht wirklich. Also muss da ein eigenes Designer her, mit dem man sowas bauen kann. Der sich dann z.B. so eine Entität von mir anschaut und mir dann ermöglicht, da etwas grafisch zusammen zu klicken.
Das ist auch in der Entwicklung ... kann man sich ansehen, wenn man masochistisch veranlagt ist 🙂

Vielleicht klingt die Idee ja für den einen oder anderen interessant. Es ist noch ganz am Anfang, aber das ist im Augenblick, womit ich spiele. Und ich plane, dass tatsächlich etwas mehr auszubauen. Aber die Gefahr ist dabei: Es ist unklar, ob ich wirklich im Bereich Java Desktops aktiv sein will und ich habe schon wieder so viele verrückte Ideen, die mich auch massiv vom Kurs abbringen können (Wieso nicht sowas statt als Java Anwendung auf dem Desktop im Webbrowser als WebAssembly laufen lassen? Und paar universelle Schnittstellen um die Entitäten direkt aus Datenbank oder von REST Services zu bekommen? Meine Ideen gehen dann sogar so weit, dass ich überlege, ob man das sogar als eine Art No- bzw. Low-Code Variante bauen kann, bei der man im Designer nur noch Oberflächen und Datenquellen definiert und der Rest geschieht dann mehr oder weniger im Hintergrund ...

Aber aktuell geht es halt erst einmal um:

Das einfach einmal als eine kleine Info für den Fall, dass es jemanden interessiert. Ich bin an Feedback interessiert und wenn jemand meint, dass es interessant sein könnte, dann kann man mich gerne kontaktieren ...
 

Neue Themen


Zurück
Oben