Verstößt die Verwendung von ObservableList in JavaFX gegen die Trennung von Model-View-Controller?

Ich versuche, JavaFX zu studieren, weil ich es als GUI meines Programms verwenden möchte. Meine Frage ist im Wesentlichen eine konzeptionelle:

Bisher ist mein Programm hauptsächlich das "Modell" 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 Benutzer den "Model" -Teil meines Programms problemlos verwenden und bearbeiten können. Dafür möchte ich JavaFX verwenden.

In meinen "Modell" -Klassen verwende ich offensichtlich verschiedene Listen, Maps und andere Klassen aus der Java Collections API. Damit die Benutzer meines Programms diese zugrunde liegenden Listen und Karten bearbeiten 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 eineMachineMonitor 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 Ungleichungen auftreten (z 1 Umdrehung / Sek.)MachineMonitor Feuert ein RestartMachineEvent ab.

Derzeit verwende ich eine ArrayList <MachineMonitor> den Überblick über alle Personen zu behaltenMachineMonitor's. Ich möchte, dass der Benutzer eine TableView bearbeiten kann, in der die Liste der Elemente angezeigt wirdMachineMonitors, damit sie beispielsweise neue erstellen und entfernen könnenMachineMonitorverschiedene Maschinen überwachen.

Damit ich verfolgen kann, was der Benutzer meines Programms tun möchte (z. B. einMachineMonitor für Maschine Nr. 5, die prüft, ob die Umdrehung / s der Zahnräder unter 0,5 fällt) verwende ich eine ObservableList <MachineMonitor> als zugrunde liegende Liste für die TableView.

Die einfachste Möglichkeit, das "Modell" und die "Ansicht" meines Programms zu verknüpfen, besteht darin, die Klasse "Modell" so zu ändern, dass sie eine ObservableList <enthältMachineMonitor> und keine ArrayList <MachineMonitor> aber (kommen wir zum Thema der Frage) Ich finde, dass dies sehr chaotisch ist, weil es "Model" - und "View" -Code mischt.

Ein naiver Ansatz wäre die Verwendung einer ObservableList <MachineMonitor> für die TableView und behalten Sie die Verwendung meiner ArrayList <MachineMonitor>. An der ObservableList <vorgenommene ÄnderungenMachineMonitor> Die zugrunde liegende Liste gemäß den JavaFX-Spezifikationen nicht beeinflussen.

In Anbetracht dessen ist dies der beste Weg, um dieses Rätsel zu lösen und einen ChangeListener für die ObservableList zu erstellenMachineMonitor> dass die an der ObservableList vorgenommenen Änderungen "weitergegeben" werden <MachineMonitor> zur zugrunde liegenden "Model" ArrayList <MachineMonitor>? Vielleicht in eine Klasse namens MachineMonitorController setzen?

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 fast vollständige Trennung zwischen "Modell" und "Ansicht" aufrechtzuerhalten?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage