Как организовать контроллеры/презентаторы в большом приложении JavaFx 2.0?

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

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

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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