O uso de ObservableList no JavaFX vai contra a separação de Model-View-Controller?

Estou tentando um estudo do JavaFX porque quero usá-lo como a GUI do meu programa. Minha pergunta é essencialmente conceitual:

Até o momento, meu programa é principalmente a parte "Modelo" do padrão MVC; isto é, quase todo o meu código é a representação OO de abstrações no sentido de classes, e todo esse código é código lógico.

Como não quero ser o único usuário do meu programa, quero adicionar a parte "View" do MVC para que as pessoas possam usar e manipular facilmente a parte "Model" do meu programa. Para isso, quero usar o JavaFX.

Nas minhas aulas "Modelo", obviamente, uso várias listas, mapas e outras classes da API Java Collections. Para permitir que os usuários do meu programa manipulem essas listas e mapas subjacentes, desejo usar as interfaces Observable (List / Map) no JavaFX.

Um exemplo concreto para trazer clareza à situação:

Digamos que eu tenho umMachineMonitor classe que a cada 3 minutos verifica certas propriedades de uma máquina, como se a conexão ainda estiver boa, a velocidade em que as engrenagens estão girando etc. Se certas desigualdades forem atendidas (diga que a velocidade das engrenagens caiu para uma taxa de 1 volta / s) oMachineMonitor aciona um RestartMachineEvent.

Atualmente eu uso um ArrayList <MachineMonitor> acompanhar todas as pessoasMachineMonitor's. Agora, estendendo-me para a parte "View" do MVC, desejo que o usuário possa manipular um TableView que exibe a lista deMachineMonitors para que eles possam, por exemplo, criar e remover novosMachineMonitorpara monitorar várias máquinas.

Para que eu possa acompanhar o que o usuário do meu programa deseja fazer (por exemplo, criar umMachineMonitor para a máquina nº 5 que verifica se o giro / s das engrenagens cai abaixo de 0,5) Eu uso um ObservableList <MachineMonitor> como a lista subjacente para o TableView.

A maneira mais fácil de vincular o "Model" e "View" do meu programa seria simplesmente alterar a classe "Model" para ter um ObservableList <MachineMonitor> e não um ArrayList <MachineMonitor> mas (chegando ao tópico da pergunta), sinto que isso é muito confuso porque combina o código "Model" e "View".

Uma abordagem ingênua seria usar um ObservableList <MachineMonitor> para o TableView e mantenha o uso do meu ArrayList <MachineMonitor>. No entanto, as alterações feitas no ObservableList <MachineMonitor> não afetam a lista subjacente conforme as especificações JavaFX.

Diante disso, é a melhor maneira de resolver esse dilema para criar um ChangeListener para o ObservableList <MachineMonitor> que "propaga" as alterações feitas no ObservableList <MachineMonitor> para o "Modelo" ArrayList subjacente <MachineMonitor>? Talvez coloque isso em uma classe chamada MachineMonitorController?

Essa solução ad-hoc parece muito confusa e não ideal.

Minha pergunta é: Qual é a melhor maneira de manter uma separação quase completa entre o "Modelo" e "Exibir" nesse cenário?

questionAnswers(2)

yourAnswerToTheQuestion