2015-05-06 13 views
6

Tôi biết điều này có một số bài đăng liên quan, nhưng tôi có một số câu hỏi cụ thể mà tôi hy vọng tôi có thể nhận trợ giúp. Xin lỗi nếu chúng rất cơ bản ..Đặt từng gói VS theo từng thư viện theo từng tính năng?

Đây là một vấn đề mẫu - rất đơn giản, nhưng bạn nhận được hình ảnh - Tôi có một số đối tượng, có một số chức năng phổ biến, ví dụ: các phòng ban trong một công ty dược phẩm - thần kinh học, ung thư, nhiễm trùng vv Tất cả đều cần phân tích các tệp tài liệu bệnh nhân và tải dữ liệu lên cơ sở dữ liệu. Tất nhiên bản chất của dữ liệu hơi khác nhau đối với mỗi bộ phận. Nếu tôi sử dụng gói-by-tính năng, tôi sẽ phải

com.company.neurology 
     Neurology.java 
     NeurologyDocument.java 
     NeurologyDAO.java 

com.company.infection 
     Infection.java 
     InfectionDocument.java 
     InfectionDAO.java 

, vv Vấn đề là tôi cần một lớp trừu tượng mà các lớp Document cần phải mở rộng ví dụ

AbstractDocument.java 
public class AbstractDocument 
{ 
     public void validateDocument(){...} 
     public void readDocumentHeader(){...} 
     public void readDocumentFooter(){...} 
     ... 
} 

Một số tệp truy cập dữ liệu ví dụ:

DBConnection.java 
    public class DBConnection 
    { 
     public void makeConnectionToDB() {... } 
     public void createCache() {... } 
     public void closeConnectionToDB() {... } 
    } 

một số lớp học lỗi

ParseError.java, PatientNotFoundException etc. 

Nếu gói này bởi tính năng, nơi nào các lớp này thường/interfaces đi đâu?

+1

com.company.common? –

+0

Tôi đoán người ta có thể làm điều đó, nhưng sẽ có một loạt các lớp học không liên quan trong một gói 'phổ biến' như vậy. – user2689782

Trả lời

0

Tôi khuyên bạn nên giữ mọi thứ đơn giản. Miễn là bạn không được lười biếng về nó, đưa chúng vào com.company là một giải pháp hợp lý. Trước tiên, điều này đòi hỏi kỷ luật phải di chuyển chúng ra thành các gói riêng biệt bất cứ khi nào bạn nhận thấy các nhóm phổ biến về tổ chức.

Trong trường hợp ví dụ của bạn, bạn đã bắt đầu để làm cho các kết nối - bài viết của bạn chính nó là phân đoạn cho thấy những gói bổ sung:

com.company.dataaccess 
com.company.error 

AbstractDocument.java có lẽ không xứng đáng đó là gói riêng - nhưng . Nếu bạn kết thúc việc tạo thêm các giao diện/lớp liên quan, sau đó chuyển chúng vào một gói thích hợp, nhưng đừng lo lắng về vấn đề này bằng cách lo lắng về nó cho đến khi nó thực sự trở thành một vấn đề.

+0

Nếu tôi tạo com.company.dataaccess và com.company.error, tôi sẽ mở rộng mã trên các gói (không được khuyến nghị!). Ngoài ra com.company.dataaccess sẽ không chứa các tệp DAO vì những tệp này sẽ nằm trong các tệp bộ phận riêng lẻ. Vì vậy, mã liên quan được trải ra. Tôi đoán không có thiết kế hoàn hảo ... – user2689782

+0

Tôi nghĩ rằng bạn đang nghĩ về gói như một nguyên tắc OOP, chứ không phải là một gói Java (mà là nhiều hơn một không gian tên). Mở rộng trên các tệp 'jar' không được khuyến nghị, nhưng mở rộng trên các gói không nhất thiết phải thiết kế xấu. Điều đó nói rằng, các thông báo lỗi có lẽ tốt hơn nên giữ gần hơn với lớp sử dụng chúng. Tôi đã suy ra, dường như không chính xác, rằng đây sẽ là các loại lỗi/ngoại lệ sẽ được sử dụng tự do trong suốt ứng dụng. – Morgen

+0

Xin chào, các lỗi sẽ được sử dụng một cách tự do, vì vậy bạn có quyền nói về việc giữ nó ở vị trí trung tâm. Tôi đã đọc "Java hiệu quả" của Bloch, mà chủ trương giữ các lớp con trong cùng một gói với lớp cha, nhưng rõ ràng, người ta không thể tuân thủ mọi nguyên tắc thiết kế mọi lúc .... – user2689782

1

Tôi không nghĩ trong trường hợp của bạn, bạn nên tạo một số gói common. Tôi đoán một cái gì đó là sai với abstractions được sử dụng.

Bạn phải tìm cách kết hợp các lớp học với cùng mục đích vào một số gói và đặt gói này theo com.company.shared.<feature_name>.

Trong trường hợp của bạn nó có thể là:

  • com.company.shared.database
  • com.company.shared.data_parsing

Đó là không có vấn đề cho một gói chứa chỉ một hoặc hai lớp. Nhưng nó nên đoàn kết chỉ các lớp học với cùng một mục đích và có một tên nói rõ ràng.

Tránh các tên như vậy cho cả gói và lớp học là common. Một tên nên nói cho chính nó.

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