Sử dụng MVC trong ứng dụng Java


10

Tôi cần phải viết một ứng dụng GUI đa nền tảng để xử lý (trong nhiều luồng) và trực quan hóa lượng dữ liệu khá lớn. Lý tưởng nhất là ứng dụng nên tương đối nhanh và nhìn tốt.

Giao diện của ứng dụng sẽ bao gồm tiện ích bảng, tiện ích cây và tiện ích vẽ hình tùy chỉnh. Người dùng sẽ có thể sửa đổi dữ liệu từ bất kỳ một trong những vật dụng này và những thay đổi sẽ được phản ánh ngay lập tức trong các vật dụng khác.

Đương nhiên, tôi đang dự định sử dụng MVC. Tuy nhiên, tôi thường thực hiện tất cả các chương trình GUI của mình bằng C ++ / Qt và tiếp xúc rất hạn chế với Java. Vì vậy, tôi thực sự sẽ đánh giá cao bất kỳ lời khuyên nào về cách tổ chức một ứng dụng như vậy trong Java. Cụ thể, tôi nên sử dụng Swing hay JavaFX? Những vật dụng bạn sẽ chọn cho công việc? Bạn có thể giới thiệu bất kỳ cuốn sách / hướng dẫn trực tuyến nào đề cập đến các khía cạnh này của nền tảng Java không?

Tôi sẽ đánh giá rất cao bất kỳ thông tin phản hồi. Cảm ơn!

(câu hỏi này ban đầu được đăng trên Stack Overflow , nhưng trang web này được đề xuất là một nơi thích hợp hơn để hỏi nó)

Câu trả lời:


21

Đây là tất cả rất chủ quan vì nhiều công nghệ khác nhau sẽ có thể phục vụ nhu cầu của bạn.

Giống như những người khác, có lẽ tôi sẽ chỉ đề xuất công nghệ mà cá nhân tôi thích cho một dự án như vậy, đó sẽ là JavaFX .

Những lý do tôi muốn giới thiệu JavaFX là:

OK, tôi đoán ở trên là một chút tiếp tuyến, nhưng tôi muốn quảng bá JavaFX ;-)

Dù sao, để giải quyết các điểm cụ thể trong câu hỏi của bạn:

  • JavaFX là một khung GUI đa nền tảng (hiện tại là Mac / Windows / Linux).
  • JavaFX đã sẵn sàng, hỗ trợ đa luồng chất lượng cao (khung công tác lõi là luồng đơn như mọi nền tảng GUI khác ngoài đó, nhưng bạn có thể xác định các tác vụ của riêng mình để được thực thi đồng thời khỏi luồng GUI để luồng GUI vẫn còn phản ứng nhanh nhẹn).
  • Một chương trình JavaFX được viết tốt sẽ không có vấn đề nào hoạt động đủ tốt để trực quan hóa số lượng dữ liệu khá lớn. Đây là một dự án JavaFX mẫu thực hiện điều đó.
  • Khả năng tạo kiểu cho ứng dụng thông qua css, sử dụng hiệu ứng hình ảnh và hoạt hình, cho phép bạn làm việc với các nhà thiết kế để làm cho ứng dụng của bạn trông tuyệt vời hoặc tự làm điều đó nếu bạn có kỹ năng.
  • JavaFX có TableViewTreeView mà bạn có thể sử dụng. Ngoài ra còn có một điều khiển TreeTable kết hợp đã được phát triển để chuẩn bị cho bản phát hành Java 8 .
  • Tiện ích vẽ hình tùy chỉnh có thể sử dụng hình dạng biểu đồ cảnh hoặc khung vẽ trực tiếp - đó thực sự chỉ là vấn đề về phong cách và sở thích mã hóa.
  • Các thuộc tính và các phương tiện ràng buộc của JavaFX cùng với các khung công cụ lắng nghe sự kiện khiến việc sửa đổi dữ liệu bằng một điều khiển trở nên đơn giản và có các thay đổi được phản ánh ngay lập tức trong các điều khiển khác.
  • Để phát triển kiểu MVC, bạn có thể viết mô hình của mình bằng các đối tượng java đơn giản, xác định chế độ xem của bạn bằng ngôn ngữ đánh dấu FXML (được tạo bằng công cụ bố cục đồ họa SceneBuilder nếu muốn) và xác định logic điều khiển của bạn trong Java (hoặc ngôn ngữ kịch bản lệnh khác nếu bạn thích) , cộng với bạn nên tách phong cách của bạn khỏi logic bằng cách sử dụng CSS.
  • Khi bạn hạn chế tiếp xúc với Java, đường cong học tập sẽ rất đáng kể. Có các hướng dẫn Java tuyệt vời ngoài các hướng dẫn JavaFX mà tôi đã liên kết trước đó có thể giúp với điều này. Mã lõi JavaFX chỉ sử dụng các phương tiện có sẵn trong JDK, vì vậy, để sử dụng JavaFX, bạn không cần phải tìm hiểu nhiều thư viện và khung công tác bổ sung (như bạn sẽ học nếu bạn đang học JavaEE). Vì vậy, hai trang web này cung cấp hầu hết thông tin bạn cần để tăng tốc.
  • Đối với tổ chức ứng dụng, nếu bạn có một ứng dụng phức tạp và cần sự hỗ trợ của khung ứng dụng khách hoàn chỉnh, đã được chứng minh và không bận tâm đến việc học thêm, thì bạn có thể nhúng JavaFX vào RCP Eclipse hoặc NetBeans RCP , theo đó đến trang của họ có thể giúp bạn tiết kiệm nhiều năm thời gian phát triển. Tôi chỉ khuyên bạn nên xem xét các nền tảng như vậy nếu nhu cầu của bạn chứng minh điều đó, bởi vì đối với các dự án có quy mô vừa và nhỏ, có thể sẽ đơn giản hơn để mã hóa nội dung trực tiếp trong JavaFX mà không cần các khung nền tảng máy khách phức tạp như Eclipse và NetBeans.
  • Về việc bạn nên sử dụng Swing hay JavaFX, tôi không thực sự là người khách quan nhất để trả lời điều đó. JavaFX chắc chắn có những thiếu sót sẽ trở nên rõ ràng đối với bạn khi bạn bắt đầu sử dụng nó (cũng như Swing).
  • Đối với hướng dẫn trực tuyến, tôi đã liên kết với hầu hết những người có liên quan. Có một hướng dẫn tốt đẹp được thiết lập cho một ứng dụng hoàn chỉnh .
  • Các sách Pro JavaFX 2JavaFX 2.0 Giới thiệu bằng ví dụ được đánh giá cao.

Cảm ơn bạn cho câu trả lời tuyệt vời này! JavaFX chắc chắn nghe giống như một nền tảng ngọt ngào và tôi chắc chắn sẽ đầu tư nhiều thời gian vào nó. Ngoài ra, cả hai cuốn sách bạn đã giới thiệu đều có sẵn tại thư viện của tôi :)
egor

1
Liên kết "IDE tốt nhất thế giới" đó thực sự chỉ cần trỏ đến IntelliJ IDEA;) Câu trả lời tuyệt vời, rất nhiều thông tin, cảm ơn!
Cooper

1
Cần lưu ý rằng JavaFX hiện không có bất kỳ hỗ trợ trợ năng nào. Đó có thể là một công cụ giảm giá đối với một số người (nó là dành cho tôi) và sẽ phải tiếp tục sử dụng Swing.
Cooper

JavaFX hiện cung cấp hỗ trợ trợ năng. Chức năng này đã được phân phối trong Java 8u40, trong đó JEP 204: Khả năng truy cập JavaFX được triển khai.
jewnes

5

Đi với một mô hình Model-View-Presenter để thay thế. Bạn có thể xem một ví dụ MVP tốt trong Swing tại đây thông qua dự án mvp4j .

Mặc dù không phải là Swing, tôi cũng sẽ kiểm tra các bài viết MVP tại trang web Nhà phát triển Google của GWT để hiểu rõ hơn về mẫu này và cách áp dụng nó trong Java; các hiệu trưởng thiết kế giống nhau đứng bất kể khuôn khổ và GWT rất giống với Swing.

Phân tích nhanh về cách thức hoạt động của MVP:

  • Xem : Một lớp chứa đúng các thành phần GUI của bạn. Không có nhận thức về logic hoặc mô hình, thậm chí không xử lý sự kiện. Điều này làm cho quan điểm rất ngớ ngẩn, nhưng rất dùng một lần và thay đổi.
  • Presenter : Một lớp xử lý logic ứng dụng của bạn. Người thuyết trình sẽ liên kết với một (hoặc nhiều) lớp xem và xử lý tất cả logic ứng dụng và điều khiển mô hình cần thiết.
  • Model : Đối tượng mô hình dữ liệu của bạn. Tốt nhất là giữ những thứ này giống như POJO nhất có thể (các đối tượng java cũ đơn giản).

Khi được triển khai chính xác, MVP sẽ làm cho ứng dụng của bạn tách rời và cho phép bạn thực hiện các sửa đổi mà không làm phiền các khu vực khác trong ứng dụng của bạn.

Chỉnh sửa: Dựa trên quyết định sử dụng JavaFX của bạn, tôi khuyên bạn nên kiểm tra các bài viết sau


Cảm ơn bạn! Tôi nghĩ rằng tôi đã quyết định sử dụng JavaFX, nhưng sẽ đọc về MVP và cách sử dụng nó với nền tảng này.
egor

1
Tuyệt quá! Nếu bạn quyết định sử dụng mẫu MVP, đây là một liên kết cung cấp một ví dụ trong mã JavaFX.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper

2

Các vật dụng mà bạn yêu cầu có thể được tìm thấy trong cả Swing hoặc SWT . Tài liệu này chứa các ví dụ về các thành phần (Xoay) hoặc các vật dụng (SWT) nên sẽ khá dễ dàng để xác định chúng.

Swing là thư viện GUI có trong JDK và được xây dựng từ đầu. SWT là một bên ngoài và các thành phần được dựa trên những người bản địa.

Đối với MVC, cả hai đều có hỗ trợ cho nó. Trong Swing bạn có một Model cho mỗi thành phần thực tế cung cấp dữ liệu cơ bản. Thành phần chính nó là cả View và Bộ điều khiển.

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.