Использование MVC в приложении Java

10

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

Интерфейс приложения будет состоять из виджета таблицы, виджета дерева и пользовательского виджета для рисования фигур. Пользователь сможет изменять данные из любого из этих виджетов, и изменения должны быть немедленно отражены в других виджетах.

Естественно, я планирую использовать MVC. Тем не менее, я обычно занимаюсь программированием GUI на C ++ / Qt и очень мало знаком с Java. Поэтому я был бы очень признателен за советы о том, как организовать такое приложение на Java. В частности, я должен использовать Swing или JavaFX? Какие виджеты вы бы выбрали для работы? Не могли бы вы порекомендовать какие-либо книги / онлайн-учебники, которые охватывают эти аспекты платформы Java?

Я буду очень признателен за любые отзывы. Спасибо!

(этот вопрос был изначально опубликован в Stack Overflow , но этот сайт был предложен в качестве более подходящего места для того, чтобы задать его)

егор
источник

Ответы:

21

Это все очень субъективно, так как различные технологии смогут удовлетворить ваши потребности.

Как и другие, я, вероятно, просто порекомендую технологию, которую лично я бы предпочел для такого проекта, который был бы JavaFX .

Я рекомендую JavaFX по следующим причинам:

Хорошо, я думаю, что это немного касательно, но я люблю продвигать JavaFX ;-)

В любом случае, для решения конкретных вопросов в вашем вопросе:

  • JavaFX - это кроссплатформенная инфраструктура GUI (в настоящее время Mac / Windows / Linux).
  • JavaFX имеет встроенную высококачественную поддержку многопоточности (сама базовая структура является однопоточной, как и почти любая другая платформа GUI, но вы можете определить свои собственные задачи, которые будут выполняться одновременно из потока GUI, так что поток GUI останется отзывчивый).
  • У хорошо написанной JavaFX-программы не должно быть проблем с производительностью, достаточной для визуализации довольно больших объемов данных. Вот пример проекта JavaFX, который делает это.
  • Возможность стилизовать приложение с помощью CSS, использовать визуальные эффекты и анимацию, позволяет вам работать с дизайнерами, чтобы ваше приложение выглядело великолепно, или делать это самостоятельно, если у вас есть навыки.
  • JavaFX имеет TableView и TreeView, которые вы можете использовать. Существует также комбинированный элемент управления TreeTable , разработанный для подготовки к выпуску Java 8 .
  • Пользовательский виджет рисования фигур может использовать формы графа сцены или холст прямого рисования - это на самом деле просто вопрос стиля и предпочтений кодирования.
  • Свойства JavaFX и средства привязки в сочетании с инфраструктурами прослушивания событий упрощают изменение данных с использованием одного элемента управления и немедленное отражение этих изменений в других элементах управления.
  • Для разработки стиля MVC вы можете написать свою модель, используя простые объекты Java, определить ваше представление с помощью языка разметки FXML (созданного с помощью инструмента графического макета SceneBuilder, если хотите) и определить свою логику управления в Java (или другом языке сценариев, если вы предпочитаете) Кроме того, вы должны отделить свой стиль от логики с помощью CSS.
  • Поскольку у вас ограниченное знакомство с Java, кривая обучения будет существенной. В дополнение к учебникам по JavaFX, на которые я ссылался ранее, есть отличные учебники по Java, которые могут помочь с этим. Базовый код JavaFX использует только средства, доступные в JDK, поэтому для использования JavaFX вам не нужно изучать много дополнительных библиотек и сред (как, например, если бы вы изучали JavaEE). Таким образом, эти два учебных сайта предоставляют большую часть информации, необходимой для ускорения работы.
  • Для организации приложений, если у вас есть сложное приложение, и вам требуется поддержка полной, проверенной клиентской прикладной среды и вы не возражаете проделывать дополнительное обучение, вы можете встроить JavaFX в Eclipse RCP или NetBeans RCP , который, согласно чтобы их страницы могли сэкономить вам годы разработки. Я бы посоветовал смотреть на такие платформы только в том случае, если ваши потребности это оправдывают, поскольку для проектов малого и среднего размера, вероятно, будет проще кодировать весь материал непосредственно в JavaFX без сложных клиентских платформ, таких как Eclipse и NetBeans.
  • Что касается того, следует ли вам использовать Swing или JavaFX, я на самом деле не самый объективный человек, чтобы ответить на это. JavaFX определенно имеет недостатки, которые станут очевидными для вас, когда вы начнете его использовать (как и Swing).
  • Для онлайн-учебников я привел ссылки на самые актуальные. Есть хороший учебный набор для полного приложения .
  • Книги Pro JavaFX 2 и JavaFX 2.0 Введение путем примера высоко оценены.
jewelsea
источник
Спасибо за этот удивительный ответ! JavaFX, безусловно, звучит как приятная платформа, и я определенно собираюсь потратить на это много времени. Плюс обе книги, которые вы порекомендовали, доступны в моей библиотеке :)
egor
1
Ссылка «Лучшие IDE в мире» должна указывать на IntelliJ IDEA;) Отличный ответ, очень информативный, спасибо!
Купер
1
Следует отметить, что JavaFX в настоящее время не имеет никакой поддержки специальных возможностей. Для некоторых это может помешать сделке (это было для меня) и придется продолжать использовать Swing.
Купер
JavaFX теперь обеспечивает поддержку специальных возможностей. Эта функциональность была предоставлена ​​в Java 8u40, для которой был реализован JEP 204: Доступность JavaFX .
Jewelsea
5

Перейти с рисунком Model-View-Presenter вместо этого. Вы можете посмотреть хороший пример MVP в Swing здесь через проект mvp4j .

Хотя и не Swing, я также ознакомился бы со статьями о MVP на сайте разработчиков GWT Google, чтобы узнать больше об этом шаблоне и о том, как применить его в Java; одни и те же принципы проектирования стоят независимо от каркаса, а GWT очень похож на Swing.

Краткое описание того, как работает MVP:

  • Представление : класс, который строго содержит ваши компоненты GUI. Нет понимания логики или модели, даже обработчики событий. Это делает взгляды очень тупыми, но очень одноразовыми и изменяемыми.
  • Presenter : класс, который обрабатывает логику вашего приложения. Докладчик будет привязывать к одному (или более) классам представления и обрабатывать всю необходимую логику приложения и управление моделью.
  • Модель : Ваши объекты модели данных. Лучше всего сохранять их как POJO-подобные (обычные старые объекты Java).

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

Изменить: Исходя из вашего решения использовать JavaFX, я бы порекомендовал проверить следующие статьи

бондарь
источник
Спасибо! Я думаю, что я решил пойти с JavaFX, но прочту о MVP и о том, как его можно использовать с этой платформой.
Егор
1
Большой! Если вы решите использовать шаблон MVP, вот ссылка, которая предоставляет пример в JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper
2

Необходимые виджеты можно найти как в Swing, так и в SWT . Документация содержит примеры компонентов (Swing) или виджетов (SWT), поэтому их будет довольно легко идентифицировать.

Swing - это библиотека графического интерфейса, включенная в JDK и созданная с нуля. SWT является внешним и компоненты основаны на нативных.

Что касается MVC, они оба поддерживают его. В Swing у вас есть Модель для каждого компонента, которая практически предоставляет базовые данные. Сам компонент является и представлением, и контроллером.

Адриан Бер
источник