Идет ли использование ObservableList в JavaFX против разделения Model-View-Controller?

Я пытаюсь изучить JavaFX, потому что я хочу использовать его в качестве графического интерфейса моей программы. Мой вопрос по сути является концептуальным:

На сегодняшний день моя программа в основном является «моделью» части шаблона MVC; почти весь мой код является ОО-представлением абстракций в смысле классов, и весь этот код является логическим кодом.

Поскольку я не хочу быть единственным пользователем моей программы, я хочу добавить часть MVC «Вид», чтобы люди могли легко использовать и манипулировать частью «Модель» моей программы. Для этого я хочу использовать JavaFX.

В моих «Модельных» классах я, очевидно, использую различные Списки, Карты и другие классы из API Коллекций Java. Чтобы позволить пользователям моей программы управлять этими базовыми списками и картами, я хочу использовать интерфейсы Observable (List / Map) в JavaFX.

Конкретный пример, чтобы внести ясность в ситуацию:

Допустим, у меня естьMachineMonitor Класс, который каждые 3 минуты проверяет определенные свойства машины, такие как, если соединение все еще хорошо, скорость вращения шестерен и т. д. Если соблюдаются определенные неравенства (скажем, что скорость шестерен упала до уровня 1 оборот / сек)MachineMonitor запускает RestartMachineEvent.

В настоящее время я использую ArrayList <MachineMonitor> следить за всем человекомMachineMonitor«S. Теперь, расширяясь до части «View» MVC, я хочу, чтобы пользователь мог манипулировать TableView, который отображает списокMachineMonitors, чтобы они могли, например, создавать и удалять новыеMachineMonitorСледить за различными машинами.

Чтобы я мог отслеживать, что хочет сделать пользователь моей программы (скажем, создатьMachineMonitor для машины № 5, которая проверяет, не падает ли число оборотов в секунду ниже 0,5) Я использую ObservableList <MachineMonitor> как базовый список для TableView.

Самый простой способ связать «Модель» и «Вид» моей программы - просто изменить класс «Модель» на ObservableList <MachineMonitor> а не ArrayList <MachineMonitor> Но (переходя к теме вопроса) я чувствую, что это очень грязно, потому что в нем смешаны код «Модель» и «Вид».

Наивным подходом было бы использование ObservableList <MachineMonitor> для TableView и сохранить использование моего ArrayList <MachineMonitor>. Тем не менее, изменения, внесенные в ObservableList <MachineMonitor> не влияют на базовый список в соответствии со спецификациями JavaFX.

Учитывая это, это лучший способ решить эту головоломку, чтобы создать ChangeListener для ObservableList <MachineMonitor> который "распространяет" изменения, внесенные в ObservableList <MachineMonitor> к базовому «образцу» ArrayList <MachineMonitor>? Возможно, поместите это в класс с именем MachineMonitorController?

Это специальное решение кажется очень грязным и не идеальным.

Мой вопрос: каков наилучший способ сохранить почти полное разделение между «моделью» и «представлением» в этом сценарии?

Ответы на вопрос(2)

Ваш ответ на вопрос