2013-07-29 24 views
7

Đây được coi là một loại câu hỏi chung, nhưng trước tiên tôi sẽ cung cấp cho bạn vấn đề cụ thể của tôi:java - Có bao nhiêu lớp quá nhiều? Khi nào thì thích hợp để thêm các lớp mới?

Tôi đang viết GUI cho chương trình của mình vào lúc này cho một chương trình sẽ có dạng khung với các tiện ích khác nhau (nhãn, trường văn bản, v.v.) được đặt trên đó. Ban đầu nó sẽ sử dụng thư viện javax.swing, nhưng tôi đang laving một lớp trừu tượng giữa thư viện và GUI chính nó để làm cho nó dễ dàng hơn để tạo ra một ứng dụng web làm điều tương tự.

Tôi muốn có một lớp đại diện cho bố cục của GUI: có nghĩa là, nó phải chứa tất cả thông tin về vị trí các nhãn, nút khác nhau, vv được đặt trên ngăn nội dung. Tại thời điểm này, việc thực hiện tôi đang xem xét như sau:

class Layout 
{ 
    public MyLabel titleLabel; 
    public myTextField sequenceTextField; 
    [...] 

    public void drawTitleLabel() 
    { 
    titleLabel = new MyLabel("This is the title."); 
    titleLabel.setLocation(wherever); 
    titleLabel.draw(); 
    } 

    public void drawSequenceTextField() 
    { 
    sequenceTextField = new MyTextField(); 
    [...] 
    sequenceTextField.draw(); 
    } 

    [...] 

    public void drawGuiFrame() 
    { 
    drawTitleLabel(); 
    drawSequenceTextField(); 
    [...] 
    } 
} 

Vì vậy, tôi tuyên bố mỗi widget trên khung nội dung như một lĩnh vực của lớp Layout, và sau đó tạo ra các phương pháp drawWidgetName rằng vẽ mỗi widget. Cuối cùng, tôi tạo một phương thức gọi mỗi phương thức draw... để vẽ toàn bộ GUI.

Điều này có vẻ sai. Các phương thức draw... cảm thấy như thể chúng phải là các phương thức của từng tiện ích riêng lẻ, không phải là bố cục quy mô lớn của toàn bộ GUI. Điều này gợi ý rằng tôi nên tạo các lớp riêng biệt TitleLabel, SequenceTextField v.v., mỗi phương thức có phương thức draw và sau đó chỉ có phương thức drawGuiFrame trong lớp Layout gọi tất cả các phương thức draw này (tôi thậm chí có thể tạo lớp trừu tượng) có thể mở rộng).

Sẽ có một số lợi thế trước mắt khác cho điều này. Giả sử tôi muốn kết hợp một hệ thống hộp kiểm cũng như các nhãn và vùng văn bản của tôi. Sau đó, tôi có thể tuyên bố rằng là lớp riêng của mình và cung cấp cho nó các thuộc tính isOptionA, isOptionB vv để ghi lại hộp kiểm nào đã được chọn.

Nhưng tôi hơi lưỡng lự khi triển khai GUI theo cách này, vì hai lý do. Thứ nhất, việc tạo ra rất nhiều lớp mới sẽ làm lộn xộn lên codebase với rất nhiều tệp nhỏ .java. Thứ hai, đây sẽ là rất nhiều 'sử dụng duy nhất' các lớp học: Tôi sẽ không bao giờ sử dụng mã một lần nữa, vì các lớp học sẽ được thiết kế hoàn toàn cho GUI đặc biệt này.

Vậy - số lượng lớp học quá nhiều? Có thể tạo nhiều lớp mới chỉ được sử dụng một lần chỉ vì bạn cảm thấy họ nên là lớp học? Như tôi đã nói, mặc dù tôi hoan nghênh lời khuyên cụ thể cho vấn đề cụ thể này, tôi cũng đang tìm kiếm các chỉ dẫn tổng quát hơn về thời điểm thích hợp để thêm các lớp mới.

+4

Nếu bạn muốn ít lớp học thử một ngôn ngữ khác. – Kevin

+2

Điều này có vẻ là cách tiếp cận chính xác trong Java. –

+1

Không có cách nào đúng nhưng có nhiều cách sai. Bây giờ, đừng lo lắng về nó - khi bạn có được kinh nghiệm, bạn sẽ đạt được một "cảm giác" cho vấn đề này. –

Trả lời

8

Có các lớp học riêng biệt có vẻ như là cách tiếp cận chính xác với tôi. Bạn tổ chức các lớp học trong các gói , mô-đuncác mô-đun phụ để chúng thực sự không nên "làm lộn xộn codebase". Một ứng dụng lớn trong java có thể dễ dàng có rất nhiều và nhiều lớp mà chỉ có thể được sử dụng bởi ứng dụng đơn đó. Đó là khá nhiều cách java như một ngôn ngữ và hệ sinh thái java như một toàn bộ công trình.

Trong java, thường được coi là bố cục lớp chi tiết hơn, bạn càng có càng tốt.

+0

Cảm ơn câu trả lời của bạn. Nó sẽ là thích hợp để lồng các lớp trong một lớp lớn hơn nếu chúng chỉ được sử dụng một lần, hoặc có thể làm cho lớp quá lớn? –

+0

@ Donkey_2009 phụ thuộc. Trong một số trường hợp sử dụng, nó là thích hợp. – eis

3

Bản thân tôi muốn tạo một lớp học cho từng khái niệm mới được giới thiệu. Thông thường một lớp có thể dài tùy ý, đặc biệt nếu bạn sử dụng rất nhiều dữ liệu được mã hóa cứng trong đó.Bạn sẽ phải xem ra cho các đối tượng thần http://en.wikipedia.org/wiki/God_object.

Nếu một số lớp có quá nhiều logic, nó trở nên khó đọc hơn rất nhiều. Nếu bạn cảm thấy như một lớp học đang trở nên quá lớn, hãy xem liệu có logic trong lớp có thể có lớp riêng của mình hay không.

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