Ich versuche, JavaFX zu studieren, weil ich es als GUI meines Programms verwenden möchte. Meine Frage ist im Wesentlichen eine konzeptionelle Frage:
Bis heute ist mein Programm hauptsächlich der „Modell“-Teil des MVC-Musters; Das heißt, fast mein gesamter Code ist die OO-Darstellung von Abstraktionen im Sinne von Klassen, und der gesamte Code ist logischer Code.
Da ich nicht der einzige Benutzer meines Programms sein möchte, möchte ich den „View“-Teil von MVC hinzufügen, damit die Leute den „Model“-Teil meines Programms einfach verwenden und manipulieren können. Dafür möchte ich JavaFX verwenden.
In meinen „Model“-Klassen verwende ich natürlich verschiedene Listen, Karten und andere Klassen aus der Java Collections API. Damit die Benutzer meines Programms diese zugrunde liegenden Listen und Karten manipulieren können, möchte ich die Observable(List/Map)-Schnittstellen in JavaFX verwenden.
Ein konkretes Beispiel, um Klarheit in die Situation zu bringen:
Sagen wir, ich habe eine MachineMonitor-Klasse, die alle 3 Minuten bestimmte Eigenschaften einer Maschine überprüft, z. B. ob die Verbindung noch gut ist. die Geschwindigkeit, mit der sich die Zahnräder drehen, usw. Wenn bestimmte Ungleichheiten erfüllt sind (sagen wir, dass die Geschwindigkeit der Zahnräder auf eine Geschwindigkeit von 1 Umdrehung/Sekunde gefallen ist), löst der MachineMonitor ein RestartMachineEvent aus.
Derzeit verwende ich eine ArrayList, um alle einzelnen MachineMonitors im Auge zu behalten. Ich erweitere nun den „Ansicht“-Teil von MVC und möchte, dass der Benutzer eine TableView manipulieren kann, die die Liste der MachineMonitors anzeigt, sodass er beispielsweise neue MachineMonitors erstellen und entfernen kann, um verschiedene Maschinen zu überwachen.
Damit ich verfolgen kann, was der Benutzer meines Programms tun möchte (z. B. einen MachineMonitor für Maschine Nr. 5 erstellen, der prüft, ob die Umdrehung pro Sekunde der Zahnräder unter 0,5 fällt), verwende ich einen ObservableList als zugrunde liegende Liste für die TableView.
Der einfachste Weg, das „Modell“ zu verknüpfen und „View“ meines Programms würde einfach darin bestehen, die „Model“-Klasse so zu ändern, dass sie eine ObservableList und keine ArrayList hat, aber (um zum Thema der Frage zu kommen) finde ich, dass dies sehr chaotisch ist, weil es „Model“- und „View“-Code vermischt.
Ein naiver Ansatz wäre die Verwendung eines ObservableList für die TableView und behalten Sie die Verwendung meines ArrayList bei. Änderungen, die an der ObservableList vorgenommen werden, wirken sich jedoch gemäß den JavaFX-Spezifikationen nicht auf die zugrunde liegende Liste aus.
Vor diesem Hintergrund ist die beste Möglichkeit, dieses Rätsel zu lösen, einen ChangeListener für die ObservableList zu erstellen, der die an der ObservableList vorgenommenen Änderungen an die zugrunde liegende Liste „weitergibt“. „Modell“ ArrayList? Vielleicht in eine Klasse namens MachineMonitorController einfügen?
Diese Ad-hoc-Lösung scheint sehr chaotisch und nicht ideal zu sein.
Meine Frage ist: Was ist der beste Weg, um in diesem Szenario eine nahezu vollständige Trennung zwischen „Modell“ und „Ansicht“ beizubehalten?
Verstößt die Verwendung von ObservableList in JavaFX gegen die Trennung von Model, View und Controller? ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Warum Shaps Erklärer.Model.Predict () und Model.Predict nicht übereinstimmen?
by Anonymous » » in Python - 0 Replies
- 31 Views
-
Last post by Anonymous
-
-
-
Warum Shaps Erklärer.Model.Predict () und Model.Predict nicht übereinstimmen?
by Anonymous » » in Python - 0 Replies
- 29 Views
-
Last post by Anonymous
-
Mobile version