Використання MVC у додатку Java


10

Мені потрібно написати міжплатформенну програму GUI для обробки (у декількох потоках) та візуалізації досить великої кількості даних. В ідеалі додаток має бути відносно швидким і добре виглядати.

Інтерфейс програми буде складатися з віджету таблиці, дерева-віджета та спеціального віджета для малювання фігури. Користувач зможе змінювати дані з будь-якого з цих віджетів, і зміни повинні бути негайно відображені в інших віджетах.

Природно, я планую використовувати MVC. Однак, як правило, я виконую все своє графічне графічне програмування на C ++ / Qt, і я дуже обмежений. Тому я дуже вдячний за будь-які поради щодо організації такого додатку на Java. Зокрема, чи варто використовувати Swing або JavaFX? Які віджети ви вибрали б для роботи? Чи можете ви порекомендувати які-небудь книги / онлайн-підручники, які висвітлюють ці аспекти платформи Java?

Я буду дуже вдячний за будь-які відгуки. Дякую!

( Спочатку це запитання було розміщено на "Переповнюванні стека" , але цей сайт було запропоновано як відповідне місце для його запитання)

Відповіді:


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 у RC Eclipse RCP або NetBeans RCP , який, відповідно, щоб їх сторінки могли заощадити роки на розвиток. Я б радив дивитись на такі платформи, лише якщо ваші потреби це виправдовують, тому що для невеликих та середніх проектів, мабуть, буде простіше закодувати речі безпосередньо в JavaFX без складних системних платформ клієнтів, таких як Eclipse та NetBeans.
  • Щодо того, чи варто вам користуватися Swing або JavaFX, я насправді не найбільш об’єктивна людина, яка відповіла на це. У JavaFX безумовно є недоліки, які стануть очевидними для вас, коли ви починаєте користуватися ним (як і Swing).
  • Для навчальних посібників в Інтернеті я зв'язав найбільш релевантні. Існує хороший набір підручника для повного додатка .
  • Книги Pro JavaFX 2 та JavaFX 2.0 Вступ за прикладом високо оцінені.

Дякую за цю дивовижну відповідь! JavaFX впевнено звучить як мила платформа, і я, безумовно, збираюся вкласти у неї багато часу. Плюс обидві рекомендовані вами книги є у моїй бібліотеці :)
egor

1
Це посилання "кращі ІДЕ у світі" насправді просто вказує на IntelliJ IDEA;) Відмінна відповідь, дуже інформативна, дякую!
Купер

1
Слід зазначити, що в даний час JavaFX не підтримує доступності. Для деяких це може бути переривкою угоди (це було для мене), і мені доведеться продовжувати використовувати Swing.
Купер

Тепер JavaFX забезпечує підтримку доступності. Ця функціональність була надана в Java 8u40, для якої було реалізовано JEP 204: доступність JavaFX .
jewelsea

5

Замість цього перейдіть із шаблоном перегляду моделі-презентатора . Ви можете переглянути хороший MVP-приклад у Swing тут через проект mvp4j .

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

Швидкий аналіз роботи MVP:

  • Перегляд : Клас, який суворо містить ваші компоненти GUI. Ніякої обізнаності з логікою чи моделлю, навіть не обробниками подій. Це робить погляди дуже німими, але дуже одноразовими та змінними.
  • Ведучий : Клас, який обробляє логіку вашої програми. Презентатор прив’яже до одного (або більше) класів перегляду та обробляє всю необхідну логіку програми та управління моделлю.
  • Модель : Об'єкти вашої моделі даних. Найкраще зберігати їх як можливі POJO (звичайні старі об’єкти Java).

При правильному впровадженні MVP зробить вашу програму дуже відокремленою та дозволить вносити зміни, не порушуючи інших областей вашої програми.

Редагувати: Виходячи з вашого рішення використовувати JavaFX, рекомендую переглянути наступні статті


Дякую! Я думаю, що я вирішив піти з JavaFX, але прочитаю про MVP та те, як ним можна користуватися на цій платформі.
egor

1
Чудово! Якщо ви вирішили використовувати шаблон MVP, ось посилання, яке надає приклад у JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper

2

Потрібні віджети можна знайти як у Swing, так і у SWT . Документація містить приклади компонентів (Swing) або віджетів (SWT), тому їх ідентифікувати буде досить просто.

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

Що стосується MVC, вони обоє мають підтримку. У Swing у вас є модель для кожного компонента, яка практично забезпечує основні дані. Сам компонент є і Перегляд, і Контролер.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.