JavaFX hat eine Reihe neuer Eigenschaftsobjekte bereitgestellt, mit javafx.beans.property.DoubleProperty
denen 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?
properties
javafx
domain-objects
pjm56
quelle
quelle
Antworten:
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.
quelle
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
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.
Ich denke, diese Architekturen passen irgendwie zu Onkel Bobs Ideen zu sauberer Architektur (der Präsentationsschicht).
quelle