JavaFX - der richtige Weg, um Eigenschaften mit Domänenobjekten zu verwenden

10

JavaFX hat eine Reihe neuer Eigenschaftsobjekte bereitgestellt, mit javafx.beans.property.DoublePropertydenen Sie Felder definieren können, die automatisch beobachtet und synchronisiert werden können.

In vielen JFX-Beispielen verfügt die MVC-Modellklasse über eine Reihe dieser Eigenschaftsfelder, die dann automatisch an die Ansicht gebunden werden können.

Dies scheint uns jedoch zu ermutigen, JFX-Eigenschaften in unsere Domain-Objekte einzufügen (wenn Sie davon ausgehen, dass die Model-Klasse ein Domain-Objekt sein wird), was mir als eine schlechte Trennung von Bedenken erscheint (dh das Einfügen von GUI-Code in die Domain ).

Hat jemand gesehen, dass dieses Problem im „wirklichen Leben“ gelöst wurde, und wenn ja, wie wurde es gemacht?

pjm56
quelle
Bitte korrigieren Sie mich, wenn ich falsch liege. Mein Verständnis von JavaFX war jedoch, dass es 2008 vor dem Kauf von Oracle von Sun eingestellt wurde und erst mit der Ablehnung von Silverlight und Decline of Flash auf Apple-Geräten auf den Markt gebracht wurde. Vielleicht haben Sie Recht, dass es eng mit der Aussicht verbunden ist, und ein ursprünglicher Grund, warum es in der Sonne auf Eis gelegt wurde. Nur ein Gedanke.
Jack Stone
Sun und jetzt Oracle arbeiten seit mehreren Jahren kontinuierlich an JavaFX. Die letzte große Veränderung bestand darin, die Programmiersprache "JavaFX Script", die für die Verwendung von JavaFX erforderlich war, einzustellen und auf die Verwendung von normalem Java umzusteigen. Diese Verschiebung war auf die schlechte Akzeptanz und die Kosten für die Unterstützung einer völlig neuen Programmiersprache zurückzuführen.
Stuart Marks

Antworten:

4

Ich habe mit JavaFX 2.0 herumgespielt, worum es bei Ihrer Frage geht. Kein echter Produktionscode, nur ein persönliches Projekt, aber ich bin auf dasselbe Problem gestoßen, das Sie oben erwähnt haben. Das gesamte Modell neigt dazu, vom 2D-Framework abhängig zu werden, und ich mag es nicht.

Was ich getan habe, dass ich jede einzelne Klasse im Modell in zwei Teile geteilt habe, die reale Modellklasse, die den Inhalt aus der Datenbank laden kann, weiß, wie sie ihren Status usw. usw. ändert, und die Darstellungsklasse, die über das Erscheinungsbild entscheidet auf dem Bildschirm. Letzteres würde alle Eigenschaftsklassen enthalten.

Sie finden das gleiche Design in jedem MVC-Framework wie Swing. Es ist nur so, dass es hier kein Entrinnen gibt, es zu tun.

Hannes R.
quelle
Ein Framework, das Sie dazu zwingt, gute Designprinzipien anzuwenden oder Ihnen ins Gesicht sprengt, wenn Sie dies nicht tun. Als .NET-Typ ist mir das sehr vertraut.
MattDavey
0

Fast 7 Jahre später und diese Frage ist immer noch so gültig wie zuvor.

Meiner Meinung nach sollte Javafx niemals von einer der zum Modell gehörenden Klassen importiert werden. Sie können jedoch sehr gut funktionieren, wenn Sie eine MVVM in Kombination mit einer MVC-Architektur verwenden. In diesem Sinne ist die

  • Entitäten = (Domänen-) Modell ( M )
  • FXML-Dateien = Ansicht ( V )
  • Der Controller ist immer noch der Controller ( C )
  • Das Ansichtsmodell ( VM ) = ein neuer Satz von Datenklassen, die nur Javafx-Eigenschaften und einen Verweis auf das tatsächliche Domänenobjekt (M) enthalten, das es darstellt. Es kann Geschäftslogik-Methodenaufrufe weiter an dieses Objekt weiterleiten und als Verbund / Dekorator fungieren.

MVVM + MVC

Eine andere Möglichkeit, Dinge zu sehen, besteht darin, sich die Controller-Klasse als Teil der Ansicht vorzustellen, da sie lediglich das Ansichtsmodell mit der Ansicht (Daten und Aktionen) verknüpft. Man könnte es also leicht als Moderator oder sogar als Binder bezeichnen. Dies hängt jedoch davon ab, wie Sie den Controller verwenden. Wenn Sie Logik zum Bearbeiten des Ansichtsmodells in der Controller-Klasse hinzufügen, verdient es seinen Namen und Sie haben die oben dargestellte Architektur. Wenn die Controller-Klasse nur Modelldaten an UI-Elemente und ActionEvents an Modellmethoden bindet, wird in der Regel die unten dargestellte MVVM-Mutantenarchitektur verwendet.

MVPVM

Ich denke, diese Architekturen passen irgendwie zu Onkel Bobs Ideen zu sauberer Architektur (der Präsentationsschicht).

Vlad Călin Buzea
quelle