2010-09-20 11 views

Trả lời

16

Thực tiễn không tốt khi có gói chỉ có một lớp trong đó?

Không nhất thiết. Nó có thể là dấu hiệu của ai đó bị ám ảnh với việc phân loại mọi thứ. Mặt khác, nó chỉ có thể là một hậu quả hợp lý của một sơ đồ phân loại chung hợp lý được áp dụng trong một trường hợp bất thường.

Ví dụ về sau có thể là nơi bạn có API chung và nhiều triển khai API đó, trong đó mỗi triển khai bao gồm nhiều lớp. Nhưng một trong những triển khai (cho phép gọi nó là việc thực hiện Null) chỉ bao gồm một lớp.

Các thử nghiệm thực sự là liệu cấu trúc gói đang phục vụ mục đích của nó (s):

  • Có làm cho nó dễ dàng hơn để tìm các lớp học thư viện?

  • Các gói có tổ chức các lớp ứng dụng dọc theo các dòng cấu trúc mô-đun logic của ứng dụng không?

  • Cấu trúc có cho phép bạn sử dụng hiệu quả chế độ hiển thị "gói riêng tư" không?

nó có ý nghĩa hơn chỉ để di chuyển các lớp duy nhất để một gói util mà sẽ chứa các lớp học hữu ích ngẫu nhiên khác?

Không nhất thiết. Nếu lớp học chỉ là một lớp lá "ngẫu nhiên hữu ích", thì có một trường hợp tốt để di chuyển nó. Mặt khác, nếu nó có một chức năng cụ thể và không có ý định được sử dụng nói chung, thì tốt hơn là nên để nó ở vị trí hiện tại. Tốt nhất là không nên quá ám ảnh với việc tạo ra các hệ thống phân cấp gói thanh lịch, hoặc với việc tái cấu trúc chúng khi chúng trở nên không thanh lịch (hoặc hữu ích) như bạn nghĩ lúc đầu. Thường có nhiều việc quan trọng hơn để thực hiện, như thực hiện chức năng, viết bài kiểm tra, viết tài liệu và vân vân.

+0

Một ví dụ điển hình là plugin. Bạn có thể có một gói được gọi là com.pricingsoftware.dataproviders và các gói con của priceprovidera, priceproviderb và các tiện ích khác. Một số triển khai sẽ có rất nhiều lớp, nhưng những người khác hoàn toàn có thể chấp nhận có một lớp duy nhất, tùy thuộc vào định dạng dây. – Rich

+0

Một ví dụ khác là trình điều khiển thiết bị. –

6

Không

trọn gói được sử dụng để đưa các lớp học tương tự với nhau,
Trong hệ thống của bạn nếu không có lớp tương tự sau đó rõ ràng là bạn có thể đặt nó.

2

Có các phân đoạn khác nhau cho các lớp util tĩnh. Tôi sử dụng cái này:

  • nếu lớp util của bạn là chung chung (String utils, DB utils, vv), tôi đặt nó trong gói "util", được sử dụng trong tất cả ứng dụng.
  • nếu lớp util dành riêng cho một miền, tôi gọi nó là "DomainHelper" theo quy ước và đặt nó trong gói miền, ở cùng cấp với các lớp miền.
6

Thực tiễn không tốt khi có gói chỉ có một lớp trong đó?

Không nhất thiết. Các gói đang sử dụng để nhóm các thực thể có liên quan logic với nhau. Nó không ngăn cản bạn chỉ có một thực thể như vậy trong một gói.

Sẽ có ý nghĩa hơn khi di chuyển lớp đơn lên gói util có chứa các lớp hữu ích ngẫu nhiên khác?

Không với tôi, vì hai lý do:

  1. Util có một ý nghĩa cụ thể. Di chuyển một thực thể tùy ý đến util vì lý do cô đơn sẽ là trường hợp biên giới của việc lạm dụng.
  2. Đây là tổ chức sớm. Với Java, sự hỗ trợ IDE đủ phong phú để tổ chức lại một cách dễ dàng và hiệu quả bằng cách sử dụng một vài cú nhấp chuột. Đợi một lúc để xem dự án của bạn phát triển như thế nào và sau đó nhận cuộc gọi.
0

Nó không phải là 'xấu' để có một lớp duy nhất trong một gói, tạo một gói mới để nhóm nhiều hơn một lớp liên quan và trong trường hợp bạn mong đợi thêm các lớp liên quan đến lớp hiện tại không liên quan một cách hợp lý của bạn trong tương lai tránh tái cấu trúc. Di chuyển tất cả các lớp tiện ích ngẫu nhiên thành một gói duy nhất là một thực tế phổ biến được thấy ở nhiều nơi. Đó là một vấn đề được lựa chọn thực sự.

0

Tôi đoán nó phụ thuộc. Nó là khá hiếm khi có một gói với một lớp trong đó bởi vì ngoài các câu trả lời được liệt kê ở trên, các gói cũng phục vụ mục đích tạo ra một hệ thống lớp. Một gói chỉ có một lớp trong đó chỉ ra rằng sự phân hủy của hệ thống đã không nổi lên một số đối tượng trong hệ thống. Vì vậy, có, tôi sẽ xem xét kỹ hơn gói này và đặt câu hỏi mục đích là gì.

Tốt hơn là không nên dính những thứ ngẫu nhiên vào gói Util chính xác vì lý do được đề cập ở trên. Bạn nên tự hỏi mình có nên nghĩ đến việc tìm kiếm Util cho lớp học của bạn trong tương lai trước khi đưa nó vào đó không. Khi Util phát triển lớn, nó bắt đầu gặp khó khăn trong việc tìm kiếm tiện ích đang tìm kiếm.

1

, đó là mùi mã xác định.

Điều này không có nghĩa là nó nhất thiết phải sai, nhưng phải có một lý do thực sự tốt cho một lớp duy nhất trong một gói.

Hầu hết các trường hợp của một gói có một lớp đơn lẻ mà tôi đã thấy đã bị lỗi.

Gói nên triển khai các tính năng. Thật hiếm khi một tính năng được triển khai chỉ sử dụng một lớp duy nhất.

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