@domanskiy

Как правильно разносить код в JavaFX+FXML с моделью MVC?

Есть три файла. Стандартно созданы в IDEA
main.java
controller.java
sample.fxml

С кнопочками и прочим уже наигрался.
Вопрос, как и куда по концепции MVC прописывать код.
Например, мне нужно при запуске программы, что бы код опрашивал БД или считывал файл. Полученные данные массивом подгружал в ComboBox. В последующем, интерфейс приложения реагирует на выбранный вариант из выпадающего списка - это уже понятно. Это в controller.java прописывать.
Весь код я могу и в controller.java прописать. Но это вроде как не совсем правильно.
В общем - куда писать ту часть кода с опросом БД и файла? Всякие конструктора, массивы, переменные?
  • Вопрос задан
  • 383 просмотра
Решения вопроса 1
jamakasi666
@jamakasi666
Просто IT'шник.
domanskiy, пытайтесь и осваивайте, только перед этим почитайте книгу, статью о MVC, что это, зачем, как и где применяется, как используется в java и в javafx в частности. Скажу даже по другому, MVC это обобщенный принцип, а вот его реализаций в подходе уйма.
Сам вопрос противоречит вообще всему.

Если утрировать то примерно так образно будет выглядеть один из вариантов MVC в javafx:
К примеру программа которая должна читать\сохранять файл, и выводить содержимое в таблицу на форме.
M (Model) - скажем будет DataModel.class. В нем 3 функции loadData(), saveData() и getData(). Реализует полностью логику работы Как читать\писать файл. Как переварить данные, сложить\умножить\...
V (View) - это непосредственно то как что то будет отображено на форме, т.е. это сам FXML файл или класс описывающий интерфейс, где какая кнопка, как она выглядит. Предоставляет ListView и пару кнопок для обращения к себе. Абсолютно ничего не знает откуда и как берутся данные для отображения(т.е. совсем).
С (Controller) - к примеру DataController.class. Этот класс знает только что предоставил View (опять же просто знает что там есть UI который сам нарисует) и пару кнопок, опять же не знает как они выглядят, где они находятся. Также знает где взять данные (из DataModel) но абсолютно не знает как она их получает. По итогу, тут идет стык Представления и Данных. Просто берет из DataModel методом getData() данные и передает их в View в listView. Берет событие кнопки load и вызывает в DataModel метод loadData(). При этом еще раз, контроллер понятия не имеет, где там кнопка на форме, как добываются данные, ему это до фени.
Как итог каждая часть не зависит от другой. Надо чтобы вместо получения данных из файла они брались из БД или телепатией? Не вопрос, просто переделай DataModel.class , все остальные части программы даже не поймут что что то изменилось. Надо вместо JavaFX отдать данные в виде вэб странички? Пожалуйста меняй View и опять же ничего другого переделывать не надо.

А теперь возвращаемся к началу, бегом читать литературу.

А и еще на за метку, любые длительные работы надо выполнять в фоне и дозаполнять ими форму. Если же данные влияют на отображение то для этого существуют прелоадеры (вот запускаешь ты свою IDE и видишь сначала квадратик с картинкой и прогресбаром и только следом отображается окно программы).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@domanskiy Автор вопроса
Как мне кажется, нужно делать так:
- всю логику работы с БД, если не выводить в отдельный класс, то нужно прописывать в main.java
- список/массив, который заполняется по запросу из БД то же в main
- А вот уже заполнение значениями из списка элемента интерфейса - ComboBox, прописать в controller в разделе инициализации.
Верно?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы