JavaFX - cách đúng để sử dụng Thuộc tính với các đối tượng miền


10

JavaFX đã cung cấp một loạt các đối tượng Thuộc tính mới, như javafx.beans.property.DoublePropertycho phép bạn xác định các trường có thể được quan sát và đồng bộ hóa tự động.

Trong nhiều ví dụ về JFX, lớp mô hình MVC có một số trường Thuộc tính này, sau đó có thể liên kết tự động với khung nhìn.

Tuy nhiên, điều này dường như đang khuyến khích chúng tôi đưa các thuộc tính JFX vào các đối tượng Miền của chúng tôi (nếu bạn cho rằng lớp Model sẽ là một đối tượng miền), điều này gây cho tôi một sự phân tách đáng lo ngại (ví dụ như đặt mã GUI vào Miền ).

Có ai thấy vấn đề này được giải quyết trong 'cuộc sống thực' và, nếu vậy, nó đã được thực hiện như thế nào?


Vui lòng sửa lại cho tôi nếu tôi sai, nhưng sự hiểu biết của tôi về JavaFX là nó đã bị Sun gác lại vào năm 2008 trước khi mua Oracle và chỉ được tân trang lại trên thị trường với sự phản đối của Silverlight và Decline of Flash trên các thiết bị apple. Có thể bạn đúng rằng nó được gắn chặt với chế độ xem và một lý do ban đầu khiến nó bị giữ dưới ánh mặt trời. Chỉ là một ý nghĩ.
Jack Stone

Sun và bây giờ Oracle đã làm việc liên tục trên JavaFX trong vài năm. Sự thay đổi lớn gần đây là ngừng sử dụng ngôn ngữ lập trình "Tập lệnh JavaFX" được yêu cầu sử dụng JavaFX và chuyển sang sử dụng Java thông thường. Sự thay đổi này được thúc đẩy bởi việc áp dụng kém và chi phí hỗ trợ một ngôn ngữ lập trình hoàn toàn mới.
Stuart Marks

Câu trả lời:


4

Tôi đã chơi xung quanh với JavaFX 2.0, mà tôi cho rằng câu hỏi của bạn là về. Không phải mã sản xuất thực sự, chỉ là một dự án cá nhân, nhưng tôi gặp phải vấn đề tương tự mà bạn đề cập ở trên. Toàn bộ mô hình có xu hướng trở nên phụ thuộc từ khung 2D và tôi không thích nó.

Những gì tôi đã làm là tôi chia mỗi lớp trong mô hình thành hai, lớp mô hình thực , có khả năng tải nội dung của nó từ cơ sở dữ liệu, biết cách nó thay đổi trạng thái của nó, v.v ... và lớp đại diện quyết định sự xuất hiện trên màn hình. Cái sau sẽ chứa tất cả các lớp property.

Bạn sẽ tìm thấy thiết kế tương tự trong bất kỳ khung MVC nào, như Swing. chỉ là ở đây không có lối thoát để làm điều đó.


Một khuôn khổ buộc bạn phải áp dụng các nguyên tắc thiết kế tốt hoặc thổi vào mặt bạn nếu bạn không. Là một người .NET, điều này rất quen thuộc với tôi.
MattDavey

0

Gần 7 năm sau và câu hỏi này vẫn còn hiệu lực như trước.

Theo tôi, javafx không bao giờ được nhập bởi bất kỳ lớp nào trong Mô hình. Tuy nhiên, chúng có thể hoạt động rất tốt nếu bạn áp dụng MVVM kết hợp với kiến ​​trúc MVC. Theo nghĩa này

  • mô hình thực thể = (tên miền) ( M )
  • Tệp FXML = view ( V )
  • bộ điều khiển vẫn là bộ điều khiển ( C )
  • mô hình view ( VM ) = một tập hợp các lớp dữ liệu mới chỉ chứa các thuộc tính javafx và một tham chiếu đến đối tượng miền thực tế (M) mà nó đại diện. Nó có thể vượt qua các phương thức logic nghiệp vụ gọi thêm vào đối tượng này, hoạt động như một bộ tổng hợp / trang trí.

MVVM + MVC

Một cách khác để xem mọi thứ là nghĩ về lớp trình điều khiển như là một phần của khung nhìn, vì tất cả những gì nó làm là liên kết mô hình khung nhìn với khung nhìn (dữ liệu và hành động). Vì vậy, nó có thể dễ dàng được gọi là Người thuyết trình hoặc thậm chí là Binder. Tuy nhiên, điều này phụ thuộc vào cách bạn sử dụng bộ điều khiển. Nếu bạn thêm logic để thao tác mô hình khung nhìn trong lớp Trình điều khiển, thì nó xứng đáng với tên của nó và bạn có kiến ​​trúc được trình bày ở trên. Nếu lớp trình điều khiển chỉ liên kết dữ liệu mô hình với các thành phần UI và ActionEvents với các phương thức mô hình, thì bạn có xu hướng có kiến ​​trúc đột biến MVVM được trình bày dưới đây.

MVPVM

Tôi nghĩ những kiến ​​trúc này bằng cách nào đó phù hợp với ý tưởng của Bác Bob về kiến ​​trúc sạch (lớp trình bày).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.