Đâ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.
Nếu bạn muốn ít lớp học thử một ngôn ngữ khác. – Kevin
Điều này có vẻ là cách tiếp cận chính xác trong Java. –
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. –