2013-08-13 21 views
10

Tôi đã được yêu cầu viết GUI cho chương trình shell/cmdline hiện có được viết bằng Java và tôi muốn tạo một lớp trừu tượng giữa GUI và chương trình gốc giúp dễ dàng thêm GUI khác (web giao diện, ví dụ, chứ không phải là một ứng dụng máy tính để bàn). Tại thời điểm này, cấu trúc của chương trình là như sau:.Ưu điểm và nhược điểm của việc sử dụng XML để chuyển dữ liệu trong chương trình Java này là gì?

Các tùy chọn dòng lệnh ngay lập tức được dịch sang một Hashtable Java (dùng một tùy chọn như -f opt để băm "-f=>opt" Các tùy chọn này sau đó được sử dụng . thiết lập đối tượng environment, mà chương trình sử dụng

cấu trúc tôi có trong tâm trí là:

Theo các đường liền nét, điều này có nghĩa là GUI tạo ra một tệp XML chứa thông tin giống như các tùy chọn shell/cmdline, sau đó được sử dụng để thiết lập tùy chọn environment. Điều này là, tôi không hoàn toàn chắc chắn nếu đó là cách tốt nhất cho mọi thứ để làm việc (whence các đường chấm chấm, biểu thị các cấu trúc thay thế) và tôi cũng không biết nếu XML là sự lựa chọn đúng ở đây.

Vì nó là viết tắt, các phần của chương trình thiết lập đối tượng environment từ options được đặt cùng phương pháp như các phần sử dụng environment để nhận kết quả. Vì vậy, sẽ dễ dàng hơn khi thực hiện một cái gì đó đã cung cấp các đối số shell/cmdline trực tiếp vào chương trình hơn là thực hiện một cấu trúc mà thông tin được truyền qua như một tệp XML. Tôi chắc chắn không muốn tạo tệp XML và sau đó dịch nó thành các tùy chọn trình bao và chuyển nó vào chương trình, nhưng nó có thể có ý nghĩa hơn cho GUI để tạo ra các tùy chọn trình bao thay vì tạo một XML. Ưu điểm chính của việc sử dụng một tệp XML như tôi thấy là nó làm cho công việc của các nhà phát triển trong tương lai dễ dàng hơn khi họ có thể sử dụng các thư viện hiện có để tạo các tệp XML thay vì phải lo lắng về việc nhận cú pháp -a opt1 -b opt2 -c opt3 [...] . Mặt khác, tôi đã nghe nói rằng cố gắng tạo ngôn ngữ XML của riêng bạn là not to be taken lightly (mặc dù chương trình vì nó đứng lưu trữ dữ liệu trong các tệp XML không có DTD hoặc thậm chí một lược đồ theo như tôi có thể biết).

Cách tiếp cận của tôi ngày càng ít phải không? Hay tôi đang sử dụng các công cụ hoàn toàn không thích hợp cho công việc mà tôi đang cố gắng làm?

+2

Câu hỏi được trình bày đẹp mắt, tuy nhiên tôi đã bỏ phiếu để đóng vì có vẻ như chủ quan/dựa trên ý kiến. –

+0

xml có thể hơi nặng, bạn có thể cân nhắc sử dụng YAML hoặc JSON tại chỗ của nó. –

+1

YAGNI & KISS - khái quát khi bạn có một GUI thứ hai cụ thể không dựa trên suy đoán về những gì có thể xảy ra, cho đến khi đó những gì sai với 'HashTable' đã được sử dụng. –

Trả lời

2

Trong phương pháp XML, bạn sẽ lấy các tùy chọn người dùng, tạo XML, chuyển nó tới chương trình chính, phân tích cú pháp XML và trích xuất các giá trị để đặt môi trường.Những nỗ lực này sẽ là quá nhiều, trừ khi bạn đang chuyển các lựa chọn từ một quy trình này sang quy trình khác hoặc qua dây (Ngay cả trong trường hợp đó bạn cũng có thể sử dụng json)

Nếu chúng ta đang nói về một quá trình duy nhất thông qua GUI hoặc dòng lệnh, chúng ta có thể đơn giản đóng gói các tham số này vào một đối tượng Java, điền nó bằng cách sử dụng dòng lệnh/GUI và chuyển nó vào chương trình chính. Ví dụ: Dòng lệnh hoặc GUI -> Populate EnvironmentOptions đối tượng -> Chương trình chính

Và để yêu cầu trừu tượng, bạn có thể tạo giao diện IEnvironmentOption và sử dụng nó để đặt thuộc tính bắt buộc.

interface IEnvironmentOption { 
    public static final String OPTION_NAME = "-t"; 

    public void setOption(String name, String value); 

    public String getOption(String name); 
} 

class EnvironmentOptions implements IEnvironmentOption { 
    private Properties envProperties; 

    @Override 
    public void setOption(String name, String value) { 
     envProperties.setProperty(name, value); 
    } 

    @Override 
    public String getOption(String name) { 
     return envProperties.getProperty(name); 
    } 
} 
+0

Điều gì đang diễn ra với dòng 'chuỗi cuối cùng tĩnh công cộng OPTION_NAME =" -t ";'? –

2

Có vẻ như bạn có một kế hoạch vững chắc. Đó là một mô hình khá phổ biến để tải các tùy chọn từ các đối số dòng lệnh và/hoặc một tệp cấu hình. Không có vấn đề gì khi sử dụng XML, nhưng JSON và YAML là một vài lựa chọn thay thế với cú pháp terser cũng sẽ hoạt động tốt.

Java đã có PropertiesPreferences, có thể được sử dụng để thực hiện việc này. Bạn nên nhìn vào những cái trước khi phát minh lại bánh xe.

+0

Cảm ơn. Việc tạo/tải các tệp cấu hình có làm chậm chương trình xuống nhiều không? Tôi có nên tính đến điều đó không? Tôi nghĩ rằng chúng tôi đang lập kế hoạch để thêm một GUI sẽ gọi chương trình nhiều lần, vì vậy hiệu suất là một vấn đề. –

+0

@ Donkey_2009 Khó khăn của nó để cung cấp cho bạn một câu trả lời chung chung. Nó không nhất thiết phải là một vấn đề hiệu suất, nhưng nó thực sự phụ thuộc vào cách bạn mã này. Bạn có phải chạy chương trình trong một tiến trình riêng biệt với GUI không? Nó có lẽ sẽ tốt hơn nếu nó được tham chiếu như một thư viện/tệp jar để GUI có thể trực tiếp khởi tạo các đối tượng và gọi các phương thức mà nó cần. – elevine

+0

Cuối cùng, chúng tôi muốn phát triển một giao diện web sẽ gửi cho chúng tôi thông tin và nhận lại kết quả, do đó sẽ cần một số cách tốt đẹp để đóng gói thông tin và gửi lại cho một quá trình riêng biệt sẽ phân tích cú pháp đó. Nhưng bây giờ tôi đang viết một ứng dụng máy tính để bàn bằng cách sử dụng Swing có thể dễ dàng chạy trong cùng một quá trình với chính chương trình (hiện tại, nó tự động tạo các tùy chọn dòng lệnh và cho chúng trực tiếp vào chương trình, nhưng rõ ràng không phải là giải pháp rất thanh lịch). –