2011-09-22 39 views
9

Làm thế nào để bạn quyết định tên gói nên là gì và lớp nào nên đi vào gói nào?Cách tổ chức các lớp học, các gói

Tôi đang làm việc trên một dự án mà tôi liên tục thêm/xóa lớp học và không thực sự chắc chắn nếu tôi cần gói mới hoặc nên thêm gói đó vào gói hiện tại mà hiện tại bạn không biết.

Bạn có tuân theo một bộ quy tắc khi tạo gói mới không?

Làm cách nào để bạn biết liệu bạn có đang không nhân đôi chức năng gói không? Đây có phải là chỉ để làm quen với dự án.

Bất kỳ con trỏ nào được đánh giá cao.

+0

@ Alex K: Tôi không nghĩ rằng nó bị trùng lặp. Câu hỏi mà bạn chỉ ra là về cách các gói làm việc trong Java trong khi câu hỏi này là về cách xác định các gói hiệu quả hơn. – helios

+0

@helios Có thể bạn là đúng –

Trả lời

11

Các lớp học nên làm một việc (Single Responsibility Principle).

Các lớp học thực hiện những thứ liên quan nên đi cùng gói. Nếu bạn tìm thấy bạn có thể liên kết chặt chẽ hơn một số các lớp trong một gói, làm cho chúng một gói phụ!

Ví dụ, nếu tôi có một dự án với các lớp:

  • GreetingInputWindow
  • GreetingDatabaseObject
  • GreetingDatabaseConnector

tôi có thể chỉ cần đặt tất cả chúng trong gói greeting. Nếu tôi muốn, tôi có thể đặt GreetingInputWindow trong gói greeting.ui và 2 khác vào gói greeting.db.

2

Tôi không tin rằng có bất kỳ quy tắc cứng nhắc và nhanh nào về quy ước đóng gói (mặc dù tôi có thể sai). Thông thường tôi chia nó ra thành

com.mycompanyname và sau đó:

  • api
  • điều khiển
  • dữ liệu (cho các mô hình)
  • công việc (đối với công việc cron)
  • báo cáo
  • servlet
  • utils

Nếu tôi tìm thấy tôi có một lớp học không phù hợp với bất kỳ của những người, sau đó tôi tạo ra một gói mới.

+0

Vâng, tôi sử dụng một cái gì đó tương tự.Tôi thấy điều này giữ mã được tổ chức nhưng một số dường như nghĩ rằng đây không phải là thực hành rất tốt. –

14

tôi mạnh mẽ khuyến khích từ việc tổ chức các gói từ một điểm implementational của xem, như controllers, data, vv Tôi thích nhóm chúng bằng chức năng, có nghĩa là, feature1, feature2, vv Nếu một tính năng là hợp lý phức tạp và đòi hỏi một lượng lớn số lượng các lớp học, sau đó (và chỉ sau đó) tôi tạo các gói con như trên, có nghĩa là, feature1.controllers, feature1.data, v.v.

+2

Lợi ích của cách tiếp cận michael667 là mô tả, IMO, là nó làm cho cấu hình đăng nhập dễ dàng hơn nhiều. Nếu tôi muốn xem mọi thứ liên quan đến ô tô, tôi có thể chỉ định cấu hình đăng nhập trong gói ô tô, ví dụ: – IcedDante

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