JavaFX - cara yang tepat untuk menggunakan Properti dengan objek domain


10

JavaFX telah menyediakan banyak objek Properti baru, seperti javafx.beans.property.DoublePropertyyang memungkinkan Anda untuk menentukan bidang yang dapat diamati dan disinkronkan secara otomatis.

Dalam banyak contoh JFX, kelas model MVC memiliki sejumlah bidang Properti ini, yang kemudian dapat mengikat secara otomatis ke tampilan.

Namun, ini tampaknya mendorong kami untuk menempatkan properti JFX ke objek Domain kami (jika Anda berasumsi bahwa kelas Model akan menjadi objek domain), yang menurut saya adalah pemisahan yang buruk dari keprihatinan (mis. Menempatkan kode GUI di Domain ).

Adakah yang melihat masalah ini diselesaikan dalam 'kehidupan nyata' dan, jika demikian, bagaimana hal itu dilakukan?


Harap perbaiki saya jika saya salah, tetapi pemahaman saya tentang JavaFX adalah bahwa ia ditangguhkan oleh Sun pada tahun 2008 sebelum pembelian Oracle, dan hanya diperbaharui ke pasar dengan penghentian Silverlight dan Decline of Flash pada perangkat apple. Mungkin Anda benar bahwa itu sangat erat dengan pandangan, dan alasan asli itu ditunda saat matahari. Hanya pemikiran saja.
Jack Stone

Sun dan sekarang Oracle telah bekerja terus menerus pada JavaFX selama beberapa tahun. Pergeseran besar baru-baru ini adalah untuk menghentikan bahasa pemrograman "JavaFX Script" yang diperlukan untuk menggunakan JavaFX, dan untuk beralih menggunakan Java biasa. Pergeseran ini didorong oleh adopsi yang buruk dan biaya untuk mendukung bahasa pemrograman yang sama sekali baru.
Stuart Marks

Jawaban:


4

Saya telah bermain-main dengan JavaFX 2.0, yang menurut saya pertanyaan Anda adalah tentang. Bukan kode produksi nyata, hanya proyek pribadi, tapi saya mengalami masalah yang sama yang Anda sebutkan di atas. Seluruh model cenderung menjadi tergantung dari kerangka 2D, dan saya tidak menyukainya.

Apa yang saya lakukan itu saya membagi setiap kelas tunggal dalam model menjadi dua, kelas model nyata , yang memiliki kemampuan untuk memuat isinya dari database, tahu bagaimana ia mengubah keadaannya dll dll ... dan kelas representasi yang menentukan penampilan pada layar. Yang terakhir akan berisi semua kelas Properti.

Anda akan menemukan desain yang sama dalam kerangka MVC apa pun, seperti Swing. hanya saja di sini tidak ada jalan keluar untuk melakukannya.


Kerangka kerja yang memaksa Anda untuk menerapkan prinsip-prinsip desain yang baik atau meledak di wajah Anda jika Anda tidak. Sebagai seorang. NET guy, ini sangat akrab bagi saya.
MattDavey

0

Hampir 7 tahun kemudian dan pertanyaan ini masih valid seperti sebelumnya.

Menurut pendapat saya, javafx tidak boleh diimpor oleh kelas yang termasuk dalam Model. Namun, mereka dapat bekerja dengan sangat baik jika Anda mengadopsi MVVM yang dikombinasikan dengan arsitektur MVC. Dalam hal ini

  • entitas = (domain) model ( M )
  • File FXML = tampilan ( V )
  • controller masih merupakan controller ( C )
  • view-model ( VM ) = seperangkat kelas data baru yang hanya berisi properti javafx dan referensi ke objek domain aktual (M) yang diwakilinya. Ini dapat melewati panggilan metode logika bisnis lebih jauh ke objek ini, bertindak sebagai komposit / dekorator.

MVVM + MVC

Cara lain untuk melihat sesuatu adalah dengan menganggap kelas controller sebagai bagian dari view, karena semua yang dilakukannya adalah mengikat view-model dengan view (data dan action). Jadi bisa dengan mudah disebut Presenter atau bahkan Binder. Namun ini tergantung pada bagaimana Anda menggunakan controller. Jika Anda menambahkan logika untuk memanipulasi view-model di kelas Controller, maka itu pantas namanya dan Anda memiliki arsitektur yang disajikan di atas. Jika kelas pengontrol hanya mengikat data model ke elemen UI dan ActionEvents ke metode pemodelan, maka Anda cenderung memiliki arsitektur mutan MVVM yang disajikan di bawah ini.

MVPVM

Saya pikir arsitektur ini entah bagaimana cocok dengan ide-ide Paman Bob tentang arsitektur bersih (lapisan presentasi).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.