Как организовать контроллеры / презентаторы в большом приложении JavaFx 2.0? - PullRequest
16 голосов
/ 08 января 2012

Для проекта я работал над настольным приложением JavaFX 2.0 (пользовательский интерфейс keytool). Как работает JavaFx2.0 (в любом случае, в моем проекте), обработка событий пользовательского интерфейса происходит в самих классах пользовательского интерфейса JavaFX 2.0 (например, события onclicked () или слушатели изменения свойств).

Прямо сейчас я использую статический класс с методом: getController (), который все классы пользовательского интерфейса используют для доступа к одному контроллеру приложения (как-то мне было неудобно передавать контроллер всем более 50 классам пользовательского интерфейса) ,

Проблема, однако, в том, что этот контроллер становится очень большим! У него слишком много методов (все методы бизнес-логики, к которым должны обращаться мои классы пользовательского интерфейса). Несмотря на то, что он передает только вызовы методов моей модели / службе, все еще существует множество исключений, которые необходимо перехватить на уровне контроллера для обработки их в пользовательском интерфейсе (показать сообщения об ошибках и т. Д.).

Кто-нибудь знает чистый способ заставить весь этот шаблон MVC / MVP работать лучше для моего приложения без того, чтобы классы UI / Controller / Model напрямую зависели друг от друга? Может быть, разные контроллеры для каждого варианта использования? Но тогда как мне сделать так, чтобы правильный класс пользовательского интерфейса получал правильный контроллер, не зная об этом напрямую? Может быть, с помощью интерфейса?

Ответы [ 4 ]

3 голосов
/ 08 января 2012

Я на самом деле не знаю Java FX, так что вы должны принять мой ответ немного соли. Я немного посмотрел учебники по Java FX, но все они кажутся крошечными примерами без какой-либо архитектуры ... MVC или других.

Возможно, вам не следует слишком стараться, чтобы получить чистый шаблон MVC. Мне кажется, что каждый элемент пользовательского интерфейса сам по себе является блоком MVC, например, Метка содержит текст (модель), его графическое представление (представление) и обрабатывает события (контроллер).

Возможно, вы просто делаете свою жизнь более болезненной, пытаясь создать отдельный глобальный контроллер.

Однако вы можете сохранить отдельную модель, которая понадобится, например, если вы показываете содержимое базы данных (модель). Однако, если вы делаете что-то довольно простое, достаточно использовать состояние пользовательского интерфейса в качестве модели; Хранение данных (модели) отдельно в программе просто заставит вас тратить время на синхронизацию данных в пользовательском интерфейсе и данных в отдельной модели. Дублирование данных является злом, и его следует избегать, насколько это возможно.

2 голосов
/ 13 января 2012

Я предлагаю вам протестировать JRebirth Framework

. Он предоставляет простой, но мощный шаблон, который поможет вам структурировать ваше приложение.

Этот фреймворк молодой и будет улучшен в соответствии с отзывами.получено.Не стесняйтесь, присылайте некоторые.

http://www.jrebirth.org/doc/Overview.html

Проверьте страницу обзора и предоставленный исходный код, чтобы узнать больше.

Также доступна живая демонстрация

1 голос
/ 10 января 2012

Здесь есть серия блогов Создание приложений JEE на JavaFX 2.0 , которые могут вам помочь. В нем представлены несколько шаблонов с примером того, как разделить различные компоненты (MVP) в приложении JavaFx2.

0 голосов
/ 05 марта 2012

Некоторое время назад я разместил базовое руководство на моем веб-сайте о том, как шаблон MVC может быть реализован с использованием Java и Javafx 2. Класс модели всегда отделен и ничего не должен знать о контроллере и зритель. Если это большой проект, я бы рекомендовал использовать модули, в которых есть ваша модель, программа просмотра и контроллер. Модуль может быть административным порталом или средством просмотра карт Google и т. Д.

http://www.pergande.net/blog/article/post/Javafx+2.0+MVC/id/1

...