Menggunakan MVC di aplikasi Java

10

Saya perlu menulis aplikasi GUI lintas-platform untuk memproses (dalam banyak utas) dan memvisualisasikan jumlah data yang cukup besar. Idealnya aplikasi harus relatif cepat dan terlihat bagus.

Antarmuka aplikasi akan terdiri dari widget tabel, widget pohon, dan widget menggambar-gambar khusus. Pengguna akan dapat mengubah data dari salah satu widget ini dan perubahan harus segera tercermin dalam widget lainnya.

Secara alami, saya berencana untuk menggunakan MVC. Namun, saya biasanya melakukan semua pemrograman GUI saya di C ++ / Qt, dan memiliki eksposur yang sangat terbatas ke Java. Jadi saya akan sangat menghargai saran tentang bagaimana mengatur aplikasi semacam itu di Jawa. Secara khusus, haruskah saya menggunakan Swing atau JavaFX? Widget mana yang akan Anda pilih untuk pekerjaan itu? Bisakah Anda merekomendasikan buku / tutorial online yang mencakup aspek-aspek platform Java ini?

Saya akan sangat menghargai umpan balik apa pun. Terima kasih!

(pertanyaan ini awalnya diposting di Stack Overflow , tetapi situs ini disarankan sebagai tempat yang lebih tepat untuk bertanya)

Egor
sumber

Jawaban:

21

Ini semua sangat subyektif karena beberapa teknologi yang berbeda akan dapat melayani kebutuhan Anda.

Seperti yang lain, saya mungkin hanya akan merekomendasikan teknologi yang secara pribadi saya sukai untuk proyek semacam itu, yaitu JavaFX .

Alasan saya akan merekomendasikan JavaFX adalah:

OK, saya kira di atas sedikit singgung, tapi saya suka mempromosikan JavaFX ;-)

Pokoknya, untuk membahas poin-poin spesifik dalam pertanyaan Anda:

  • JavaFX adalah kerangka kerja GUI lintas platform (saat ini Mac / Windows / Linux).
  • JavaFX memiliki dukungan multi-threading built-in, berkualitas tinggi (kerangka inti itu sendiri berulir tunggal seperti hampir semua platform GUI lain di luar sana, tetapi Anda dapat menentukan tugas Anda sendiri yang akan dieksekusi bersamaan dari utas GUI sehingga utas GUI tetap ada responsif).
  • Program JavaFX yang ditulis dengan baik seharusnya tidak memiliki masalah berkinerja cukup baik untuk memvisualisasikan jumlah data yang cukup besar. Berikut adalah contoh proyek JavaFX yang melakukan itu.
  • Kemampuan untuk mendesain aplikasi melalui css, memanfaatkan efek visual dan animasi, memungkinkan Anda untuk bekerja dengan desainer untuk membuat aplikasi Anda tampak hebat atau melakukannya sendiri jika Anda memiliki keterampilan.
  • JavaFX memiliki TableView dan TreeView yang dapat Anda gunakan. Ada juga kontrol TreeTable gabungan yang telah dikembangkan dalam persiapan untuk rilis Java 8 .
  • Widget gambar kustom dapat menggunakan bentuk grafik adegan atau kanvas gambar langsung - ini benar-benar hanya masalah gaya pengkodean dan preferensi.
  • Properti JavaFX dan fasilitas yang mengikat ditambah dengan kerangka kerja pendengar acara membuatnya sepele untuk memodifikasi data menggunakan satu kontrol dan memiliki perubahan segera tercermin dalam kontrol lain.
  • Untuk pengembangan gaya MVC, Anda dapat menulis model Anda menggunakan objek java biasa, menentukan tampilan Anda menggunakan bahasa markah FXML (dibuat menggunakan alat tata letak grafis SceneBuilder jika diinginkan) dan menentukan logika kontrol Anda di Jawa (atau bahasa skrip lain jika Anda suka) , plus Anda harus memisahkan gaya Anda dari logika Anda dengan menggunakan CSS.
  • Karena Anda memiliki eksposur terbatas ke Jawa, kurva belajar akan menjadi signifikan. Ada tutorial Java yang sangat bagus selain tutorial JavaFX yang saya tautkan sebelumnya yang dapat membantu dengan ini. Kode inti JavaFX hanya menggunakan fasilitas yang tersedia di JDK, jadi untuk menggunakan JavaFX Anda tidak perlu mempelajari banyak pustaka dan kerangka kerja tambahan (seperti yang Anda lakukan jika Anda mempelajari JavaEE misalnya). Jadi kedua situs tuotorial itu menyediakan sebagian besar informasi yang Anda perlukan untuk mempercepat.
  • Untuk organisasi aplikasi, jika Anda memiliki aplikasi yang kompleks dan membutuhkan dukungan kerangka kerja aplikasi klien yang lengkap dan terbukti dan tidak keberatan melakukan banyak pembelajaran tambahan, maka Anda dapat menanamkan JavaFX di Eclipse RCP atau NetBeans RCP , yang menurut ke halaman mereka bisa menghemat waktu pengembangan selama bertahun-tahun. Saya hanya akan menyarankan untuk melihat platform seperti itu jika kebutuhan Anda membenarkannya, karena untuk proyek skala kecil hingga menengah, mungkin akan lebih mudah untuk mengkodekan hal-hal tersebut secara langsung di JavaFX tanpa kerangka platform klien yang kompleks seperti Eclipse dan NetBeans.
  • Seperti apakah Anda harus menggunakan Swing atau JavaFX, saya bukan orang yang paling objektif untuk menjawabnya. JavaFX pasti memiliki kekurangan yang akan menjadi jelas bagi Anda ketika Anda mulai menggunakannya (seperti halnya Swing).
  • Untuk tutorial online, saya telah menautkan ke yang paling relevan. Ada satu set tutorial yang bagus untuk aplikasi lengkap .
  • Buku-buku Pro JavaFX 2 dan JavaFX 2.0 Pengantar dengan Contoh sangat dinilai.
jewellsea
sumber
Terima kasih atas jawaban yang luar biasa ini! JavaFX tentu terdengar seperti platform yang manis dan saya pasti akan menginvestasikan banyak waktu ke dalamnya. Ditambah kedua buku yang Anda rekomendasikan tersedia di perpustakaan saya :)
egor
1
Tautan "IDE terbaik di dunia" itu harus benar-benar menunjuk ke IntelliJ IDEA;) Jawaban yang bagus, sangat informatif, terima kasih!
Cooper
1
Perlu dicatat bahwa JavaFX saat ini tidak memiliki dukungan aksesibilitas. Itu bisa menjadi pemecah kesepakatan bagi sebagian orang (itu untuk saya) dan harus terus menggunakan Swing.
Cooper
JavaFX sekarang menyediakan dukungan aksesibilitas. Fungsionalitas ini disampaikan dalam Java 8u40, untuk mana JEP 204: Aksesibilitas JavaFX diimplementasikan.
jewelsea
5

Pergi dengan pola Model-view-presenter sebagai gantinya. Anda dapat melihat contoh MVP yang baik di Swing sini melalui proyek mvp4j .

Meskipun bukan Swing, saya juga akan memeriksa artikel MVP di situs Pengembang Google GWT untuk wawasan lebih lanjut tentang pola ini dan cara menerapkannya di Jawa; prinsipal desain yang sama berdiri terlepas dari kerangka dan GWT sangat mirip dengan Swing.

Rincian singkat tentang cara kerja MVP:

  • Lihat : Kelas yang berisi komponen GUI Anda secara ketat. Tidak ada kesadaran akan logika atau model, bahkan penangan acara. Ini membuat pandangan sangat bodoh, namun sangat sekali pakai dan dapat diubah.
  • Presenter : Kelas yang menangani logika aplikasi Anda. Presenter akan mengikat ke satu (atau lebih) kelas tampilan dan menangani semua logika aplikasi dan kontrol model yang diperlukan.
  • Model : Objek model data Anda. Cara terbaik untuk menjaga ini sebagai POJO seperti mungkin (objek java lama polos).

Ketika diimplementasikan dengan benar, MVP akan membuat aplikasi Anda sangat terpisah dan memungkinkan Anda untuk melakukan modifikasi tanpa mengganggu area lain dari aplikasi Anda.

Sunting: Berdasarkan keputusan Anda untuk menggunakan JavaFX, saya sarankan memeriksa artikel berikut ini

Cooper
sumber
Terima kasih! Saya pikir saya telah memutuskan untuk menggunakan JavaFX, tetapi akan membaca tentang MVP dan bagaimana hal itu dapat digunakan dengan platform ini.
egor
1
Bagus! Jika Anda memutuskan untuk menggunakan pola MVP, berikut ini tautan yang memberikan contoh di JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper
2

Widget yang Anda butuhkan dapat ditemukan di Swing atau SWT . Dokumentasi berisi contoh komponen (Ayunan) atau widget (SWT) sehingga cukup mudah untuk mengidentifikasi mereka.

Swing adalah pustaka GUI yang termasuk dalam JDK dan dibangun dari awal. SWT adalah komponen eksternal dan komponennya didasarkan pada komponen asli.

Adapun MVC, keduanya memiliki dukungan untuk itu. Di Swing Anda memiliki Model untuk setiap komponen yang secara praktis menyediakan data yang mendasarinya. Komponen itu sendiri adalah View dan Controller.

Adrian Ber
sumber