2010-01-29 71 views
18

Các giao diện trong Java có nằm trong thư mục riêng của chúng không? Hoặc cả giao diện và thực hiện của nó được đặt trong cùng một thư mục (gói)? Cảm ơn.Cấu trúc thư mục giao diện Java?

+0

tùy thuộc vào logic để đặt các gói, tôi thường sẽ thêm gói con 'impl' để chỉ định các triển khai, như: com.stackoverflow.questions, com.stackoverflow.questions.impl. – Kylar

Trả lời

11

Giao diện không cần thư mục riêng của họ. Chúng nên được đặt ở nơi có ý nghĩa, cũng giống như các lớp học nên được đặt ở nơi chúng có ý nghĩa. Trong nhiều trường hợp, nó có thể có ý nghĩa để đặt chúng trong cùng một vị trí.

1

Gói tương tự. Người dùng không nên biết hoặc quan tâm rằng họ đang sử dụng giao diện

+6

Có. Sử dụng tiền tố 'I' là các loại hạt. –

+0

Người dùng cần biết liệu họ có phải tự khởi tạo các lớp này hay không. – Powerlord

+2

"Cùng một gói" không trả lời câu hỏi. Nó rất phổ biến để có một bài kiểm tra đơn vị trong cùng một gói như lớp nó đang thử nghiệm, nhưng có nó trong một thư mục hoàn toàn khác nhau. – SyntaxT3rr0r

14

Một mẫu mà tôi đã thấy là đặt các giao diện trong thư mục cơ sở, sau đó đặt các triển khai trong thư mục con từ đó.

Ví dụ, giao diện có thể đi ở đây:

com.myproject.data.dao.CustomerDao (some people do ICustomerDao for interfaces, but some don't like that.) 
com.myproject.data.dao.ProductDao 

Và việc triển khai có thể đi ở đây:

com.myproject.data.dao.hibernate.HibernateCustomerDao 
com.myproject.data.dao.hibernate.HibernateProductDao 
com.myproject.data.dao.someotherorm.SomeOtherOrmCustomerDao 
etc. 

Điều này có thể làm việc trong một số trường hợp, và có thể không ở người khác, nhưng chỉ cần một cái gì đó để nghĩ về.

+0

cảm ơn góc nhìn này – ken

+0

Tôi đã kết thúc cách tiếp cận này cho một dự án. Tôi nhận ra rằng tôi thực sự không muốn người dùng có quyền truy cập vào bất cứ thứ gì ngoài giao diện. Từ sự hiểu biết của tôi, điều này là không thể nếu các lớp được tách ra thành các gói riêng của họ (cấp truy cập cần phải được công khai). Tôi thích cách tiếp cận bạn đã đưa ra, nhưng đối với trường hợp tôi đã cho nó không hoạt động tốt. – abrarisme

0

Không nhất thiết phải đặt giao diện trong cùng một thư mục (gói). Nếu giao diện của bạn có quyền truy cập công cộng, thì bạn có thể nhập nó ở bất kỳ đâu, trong bất kỳ gói nào.

-1

Câu hỏi khi tôi đọc nó (nhưng sau đó nó được xây dựng lạ) không phải là nếu giao diện phải nằm trong thư mục riêng của họ hay không. Câu hỏi đặt ra là nếu bạn cần tái tạo hoàn chỉnh cấu trúc thư mục bạn (đậm để nhấn mạnh những gì có trong tiêu đề của câu hỏi), nơi một chi nhánh sẽ chỉ chứa các giao diện, như thế này:

pureooabstraction/ 
| 
|_com/ 
    | 
    |_example/ 
    | 
    |__SomeInterface.java 
    |__SomeOtherInterface.java 

src/ 
| 
|_com/ 
    | 
    |_example/ 
    | 
    |__SomeClass.java 
    |__... 

Trường hợp pureooabstraction/ thư mục cấu trúc sẽ chỉ chứa "các lớp trừu tượng thuần túy" (từ quan điểm OO, không phải định nghĩa Java 'trừu tượng'), hay còn gọi là giao diện trong Java.

Và chi tiết triển khai nhỏ gọn (không tồn tại ở cấp OOA/OOD) trong đó "mã" nằm trong thư mục src/.

Điều đó chắc chắn có ý nghĩa nếu quá trình phát triển của bạn chuyển từ OOA sang OOD thành OOP.

+0

không, anh ta chỉ hỏi có nên đặt các giao diện trong cùng một gói như các triển khai không –

5

Như đã có một số điểm tốt, tôi chỉ muốn thêm một điều:

Trong một số dự án, chúng tôi đã thậm chí đi quá xa mà chúng ta đặt tất cả các giao diện vào một tiểu dự án (mô-đun maven) và triển khai thành khác một. Bằng cách này, có thể HOÀN TOÀN tách biệt các giao diện khỏi việc triển khai và hoàn thành dự án giao diện rất sớm trong dự án và phân phối nó cho các nhóm khác làm việc lại các giao diện đó. Trong mỗi dự án chúng tôi sử dụng cùng một gói.

Nói chung, tôi sẽ nói, bạn nên tách riêng các giao diện và sự hiển thị của chúng, cách không thực sự quan trọng, miễn là bạn nhất quán với nó.

0

Bất cứ nơi nào bạn muốn, nhưng tuyệt đối giữ giao diện trong cùng một gói và cấu trúc thư mục. Chỉ cần nhìn vào số java api. Nếu bạn chọn bất kỳ gói nào, bạn sẽ nhận thấy rằng nhiều gói chứa cả hai lớp và giao diện.Một số giao diện được thực hiện bởi các lớp trong cùng một gói, và một số thì không.

Tôi nghĩ thực tiễn tồi tệ nhất là nhấn mạnh rằng bạn phải có một thư mục khác cho giao diện. Tôi đã thấy các thư mục như/services và/impl và những thư mục khác, chỉ làm ẩn cấu trúc thư mục. Tại nơi làm việc hiện tại của chúng tôi, chúng tôi sử dụng rất nhiều nhà thầu đến và đi, và một số dự án của chúng tôi có nhiều loại thư mục giao diện. Thời gian duy nhất tôi nghĩ có thể sử dụng một thư mục riêng là nếu bạn có kế hoạch sao chép các giao diện vào các dự án khác, hãy nói cho EJB, nhưng thậm chí sau đó họ có thể có cùng một gói nếu bạn sử dụng một dự án được chia sẻ cho các giao diện.

Vì vậy, câu trả lời ngắn gọn là ở bất cứ đâu bạn muốn, nhưng đừng nghĩ rằng bạn cần phân tách các lớp và giao diện của mình. Trong nhiều trường hợp, bạn nên giữ chúng trong cùng một gói/thư mục.

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