(lưu ý: tl; dr sẵn ở dưới cùng rất cho ý kiến thật của tôi)
Tôi sẽ không trích dẫn bất kỳ tên tuổi lớn và nói đó là câu trả lời đúng, vì nó luôn luôn rất trường hợp phụ thuộc cách bạn làm tất cả những thứ này. Ví dụ: số lượng phương pháp: Nếu bạn đang tạo phần mềm điều khiển cho bộ điều khiển từ xa HD LCD TV hiện đại có khoảng 40-50 nút, bạn có thể chia nhỏ thành các lớp kết hợp để bạn chỉ có 7 phương pháp mỗi lớp?
Cá nhân tôi muốn giữ tất cả các phương pháp của một cấp độ truy cập trong một lớp, có nghĩa là một số lớp tiện ích có thể có hàng trăm phương pháp nhưng theo ý kiến của tôi thì việc làm một cái gì đó như StringUtil.escapeXMLspecialCharacters(someString)
dễ dàng hơn StringUtil.XML.escapeSpecialCharacters(someString)
hoặc XMLUtil.escapeSpecialCharacters(someString)
. Trong khi tất cả những giải pháp này dường như là OK, thì giải pháp đầu tiên phát triển (ít nhất là trong tâm trí của tôi), bởi vì nó là cách đơn giản và rất dễ dàng để truy cập phương thức đó: Bạn không cần phải nghĩ rằng chuỗi bạn đang xử lý có chứa XML hoặc XHTML hoặc JSON hoặc bất cứ thứ gì, bạn sẽ chỉ chọn một phương thức từ nhóm phương pháp chung và đó là nó.
Giữ trên tương tự từ xa TV trước đó, cho phép giả sử bạn chia chúng thành các lớp khác nhau. Nếu chúng ta cho phép mình có 7 phương pháp trên mỗi lớp trung bình và quản lý nhóm các nút trên điều khiển từ xa thành các nhóm nhạy cảm như MenuButtons
, AdjustmentButtons
và 'NumberSelectorButtons', chúng tôi kết thúc với 8 lớp học. Đó không phải là một điều xấu thực sự, nhưng nó được hơi khó hiểu một cách dễ dàng đặc biệt là nếu họ không chia cho các nhóm nhạy cảm với sự chăm sóc tuyệt vời. Chỉ cần tưởng tượng các rants xung quanh văn phòng TVRemotes'R'Us Inc của bạn: "Ai nói nút bật/tắt nguồn là nút điều khiển?" "Ai là joker đặt âm lượng +/- vào nút menu? PRE/CH (nút chuyển giữa kênh hiện tại và kênh trước đó và/hoặc nguồn hình ảnh) Nút không phải là nút số!" "Nút hướng dẫn mở cả hướng dẫn TV và menu điều hướng tùy theo ngữ cảnh, chúng ta sẽ làm gì với nó !?" Vì vậy, như bạn có thể hy vọng nhìn thấy từ ví dụ này, sử dụng một số tùy ý để giới hạn bản thân có thể giới thiệu một số phức tạp không cần thiết và phá vỡ dòng chảy logic của ứng dụng. Ví dụ:
Trước khi tôi ném vào hai xu cuối cùng của tôi, một điều về số dòng trên mỗi phương pháp: Hãy suy nghĩ mã dưới dạng khối.Mỗi vòng lặp là một khối, mỗi khối có điều kiện là một khối và vân vân, v.v. Số tiền tối thiểu của các khối này cần thiết cho một đơn vị mã có trách nhiệm duy nhất là gì? Đó sẽ là giới hạn của bạn, không phải là mong muốn có "Bảy ở khắp mọi nơi." từ số lượng các lớp trong gói, các phương thức trong các lớp và các dòng mã trong các phương thức.
Và đây là TL; DR:
Vì vậy, ý kiến thật của tôi là thực sự này: Số lượng các lớp trong gói nên được khá thấp. Gần đây tôi đã bắt đầu thực hiện những việc sau nhưng tôi không chắc chắn liệu mình có tiếp tục theo dõi hay không:
- Gói
foo
chứa giao diện và các lớp phổ biến khác để triển khai.
- Gói
foo.bar
chứa thực hiện các giao diện nói cho chức năng bar
- Gói
foo.baz
chứa thực hiện các giao diện nói cho chức năng baz
này thường có nghĩa toàn bộ cấu trúc của tôi có một mạch lạc (và có khả năng thấp nhất) số lớp và bằng cách đọc các giao diện cấp cao nhất (và ý kiến của họ), tôi cũng có thể hiểu các gói khác.
Phương pháp mỗi lớp: Tất cả những gì cần thiết như tôi đã giải thích ở trên. Nếu lớp học của bạn không thể sống mà không có 170 phương pháp, sau đó để cho nó có chúng. Tái cấu trúc là một đức hạnh, không phải là thứ có thể được áp dụng mọi lúc.
Đường cho mỗi phương pháp: Thấp nhất có thể, tôi thường kết thúc với 10 đến 25 dòng cho mỗi phương pháp và 25 là hơi cao đối với tôi vì vậy tôi muốn nói 10 là điểm cân bằng tốt cho điều đó.
Tôi cho rằng đề xuất này quá đơn giản. Chúng tôi không chia lớp thành hai vì chúng có nhiều hơn bảy phương pháp. Chúng ta cần suy nghĩ chủ yếu về sự gắn kết. –
Bạn không phân chia chỉ vì có nhiều hơn bảy phương pháp - nhưng chỉ số này hướng sự chú ý của bạn đến lớp mà (có thể) cần tái cấu trúc. – vektor
Trên màn hình trung bình (1920x1080), bạn có thể thấy khoảng 60 dòng tại thời điểm đó. Theo tôi, nó là quá nhiều cho một phương pháp duy nhất. –