2010-05-27 34 views
5

Tôi muốn thêm sự kiên trì vào ứng dụng dựa trên Swing của mình; và đây là lần đầu tiên tôi làm một việc như thế.Làm cho các ứng dụng Java Swing liên tục

Tôi biết cách sử dụng API tuần tự hóa Java (mặc dù tôi đang sử dụng xstream thay thế), tôi biết rằng JComponent có thể tuần tự hóa được, nhưng tôi quan tâm đến nhiều cân nhắc kiến ​​trúc hơn: cách ứng dụng nên được thiết kế sao cho trở nên dễ dàng; vv

tôi sẽ vui mừng khi thấy bất kỳ nguồn với chiều sâu xem xét các vấn đề này, mặc dù tôi sẽ còn hạnh phúc khi nghe một số thông lệ tốt nhất một cách rõ ràng :)

Trả lời

7

Bạn nên sử dụng một model-view-controller approach. Bạn chỉ tuần tự hóa mô hình, chứ không phải dạng xem. Khung nhìn nên được điền từ mô hình. Serializing thành phần Swing được anyways không được khuyến khích ở tất cả:

While Swing components do implement the Serializable interface, they are not portable between different versions of the Java Virtual Machine

Nhìn vào những gì bạn có, bạn nên có một số lớp học là mô hình của bạn và chỉ có dữ liệu. Các lớp này sẽ được tuần tự hóa bằng XStream ở đâu đó. Các lớp Swing của bạn sau đó có các phương thức để nhận các lớp mô hình này và điền vào các trường và trình soạn thảo. Sau đó, bạn có thể mở rộng giao diện người dùng, mà không phải thay đổi lớp, thêm nhiều tính năng khác hoặc cung cấp các chế độ xem khác nhau cho cùng một tập dữ liệu.

Để làm cho nó đẹp hơn, Thành phần Swing không được lưu trữ và tải mô hình, nhưng bạn nên có giao diện điều khiển mà bạn chuyển đến thành phần xoay để thực hiện các thao tác này. Bằng cách này, bạn có thể kiểm tra đơn vị tốt hơn và bạn tách logic lưu trữ khỏi logic xem.

Nếu XStream được định cấu hình chính xác và nếu bạn cẩn thận về mô hình và các trường, bạn có thể thêm nhiều trường hơn vào các lớp mô hình của mình mà không phá vỡ tính tương thích ngược.

Tôi không khuyên bạn nên sử dụng Java Serialization anyways, vì nó không phải là một thực hành tốt để sử dụng nó để lưu trữ. Java Serialization trội tại Call Method Remote. Nó tương đối mong manh khi các lớp mô hình thay đổi ..

0

Và javadoc nói (ví dụ: JComponent): Tính đến 1.4, hỗ trợ lưu trữ lâu dài tất cả JavaBeansTM đã được thêm vào gói java.beans. Vui lòng xem XMLEncoder.

Vì vậy, xem XMLEncoder.

Từ điểm kiến ​​trúc của vue, tuần tự hóa này hoạt động tốt nhất với đậu, bộ sưu tập và khái niệm về giá trị mặc định. Trên bean, nó chỉ lưu các thuộc tính bean với một giá trị khác với giá trị mặc định. (xin lỗi vì tiếng anh của tôi)

Bạn có thể định cấu hình theo ý muốn.

+0

Nếu đậu java mới và được sử dụng cho dữ liệu, XMLEncoder là một ý tưởng hay. Nếu không, tôi vẫn nghĩ rằng việc tuần tự hóa một JComponent nói chung là một thực hành không tốt. –

+0

@Mario Ortegón: Có, tôi đồng ý; nhưng con người có thể thấy "phiên bản bean" của JComponent như là một mô hình thiết kế ligth: không có người nghe, ví dụ, chỉ màu sắc, nền, vị trí ... Vì vậy, nếu chúng ta muốn tuần tự hóa/deserialize, nó cần thiết để xây dựng lại controler logic. Tôi nghĩ rằng bộ mã hóa XML không phải là rất tốt, nhưng nó không phải là rất xấu. Thật thú vị :-) – Istao

Các vấn đề liên quan