Противоречит ли использование ObservableList в JavaFX разделению Модель-Представление-Контроллер?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Противоречит ли использование ObservableList в JavaFX разделению Модель-Представление-Контроллер?

Сообщение Anonymous »

Я пытаюсь изучить JavaFX, потому что хочу использовать его в качестве графического интерфейса своей программы. Мой вопрос по сути концептуальный:
На сегодняшний день моя программа в основном представляет собой «Модельную» часть шаблона MVC; то есть почти весь мой код представляет собой объектно-ориентированное представление абстракций в смысле классов, и весь этот код представляет собой логический код.

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

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

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


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

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

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

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

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

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

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

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

Подробнее здесь: https://stackoverflow.com/questions/236 ... ler-separa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»