Hallo Programmierer und Architekten!
Ich bin neu hier und ... Ich denke mein Englisch könnte ... schrecklich sein! :-D Also ... sei vorsichtig mit mir ... bitte.JavaFX, FXML und Controller: Szenen wechseln, Szenendaten pflegen
Ich habe eine architektonische Frage über JavaFX, FXML und die verschiedenen Methoden, Szenen zu wechseln, Daten in allen Szenen zu halten ... Ich habe eine persönliche Lösung verwendet und ich muss wissen, ob es eine akzeptable Lösung ist oder nicht (um die architektonische Ebene).
Ich werde versuchen, meine Lösung zu erklären.
Ich habe eine Art "umgekehrte" Observer Pattern verwendet: stattdessen verwenden Sie viele Beobachter für jede Observable, ich habe einen Beobachter (eine bestimmte Klasse) und viele Observablen (alle Controller) verwendet.
Also, wenn es Zeit ist, die Szene zu wechseln, benachrichtigt der Controller der aktuellen Szene den Beobachter, dies zu tun. Beobachter entfernt alte Szene und lädt die neue.
Einige Details.
Ich habe eine Klasse namens SceneObserver erstellt, die java.util.Observer implementiert.
Ich benutze SceneObserver um:
- Register SceneObserver als Beobachter aller meiner Controller
- Last eine specifc FXML Datei
- eine neue Szene erstellen mit nur einem AnchorPanel als Wurzelelement ad Verwendung die Methode root.getChildren(). add() zum Anhängen an das Root-Element die geladene FXML
- einen bestimmten Controller für den FXMLLoader setzen (ich habe NICHT "fx: controller" innerhalb der verschiedenen FXML verwendet.)
Alle meine Controller erweitern java.util.Observable (dies ist ein Beispiel).
Wenn eine bestimmte Situation in einer Szene auftritt und die Szene gewechselt werden muss, meldet die Szene SceneObserver die Änderung (Observer Pattern), SceneObserver zerstört die alte Szene und lädt die neue Szene. Mit anderen Worten verwende ich nur einen Beobachter, um alle Controller zu beobachten (die Umkehrung des Beobachtungsmusters).
Alles funktioniert, aber ich weiß, dass das nicht genug ist!
Also, die Frage ist: Sprechen auf der architektonischen Ebene, ist dies eine akzeptable Lösung?
Ich weiß, das ist nicht das einzige und sicherlich gibt es andere bessere Möglichkeiten, aber ... was ist mit diesem?
Warum habe ich diese Lösung verwendet?
Nun, zwei Gründe:
- Last nur notwendig FXML (schnellere Anwendung)
- leave Controller entkoppelt
Vielen Dank an alle und ... sorry für mein Englisch :-(