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?
Trả lời
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í.
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
Có. Sử dụng tiền tố 'I' là các loại hạt. –
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
"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
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ề.
cảm ơn góc nhìn này – ken
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
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.
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.
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 –
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ó.
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.
- 1. Cấu trúc thư mục triển khai tốt cho các ứng dụng giao diện điều khiển java
- 2. Cấu trúc thư mục Maven
- 3. Giao diện K & R để đọc các thư mục: cấu trúc DIR thừa?
- 4. Cấu trúc thư mục Django?
- 5. dự án Java ước cấu trúc thư mục
- 6. Cấu trúc thư mục Android Maven
- 7. Cấu trúc src/thư mục trong C++?
- 8. Thư mục phát triển Cấu trúc
- 9. cấu trúc thư mục trong cấu trúc thư mục xcode vs thư mục trong công cụ tìm
- 10. Tạo lại cấu trúc thư mục bên trong tệp Zip bằng Java - Các thư mục trống
- 11. Tái cấu trúc thư mục C++
- 12. Cấu trúc thư mục bộ nhớ cache
- 13. java.util.zip - Tái cấu trúc thư mục
- 14. Cấu trúc thư mục cho MVC
- 15. thông số cấu trúc thư mục kho lưu trữ maven
- 16. ASP.NET MVC cấu trúc thư mục và NuGet
- 17. Thêm cấu trúc thư mục vào SVN Repo
- 18. cấu trúc thư mục mã vạch trên máy chủ web
- 19. crosstool-ng, cấu trúc thư mục và sysroot
- 20. /var/www/cấu trúc thư mục cho dự án PHP
- 21. So sánh cấu trúc thư mục trong hai môi trường
- 22. tạo zip - bỏ qua cấu trúc thư mục
- 23. Thay đổi cấu trúc thư mục trong Mercurial
- 24. Unix tar: không giữ cấu trúc thư mục
- 25. Danh sách cấu trúc cây thư mục trong python?
- 26. Các giải pháp hạn chế cấu trúc thư mục MSBuild
- 27. Thay đổi Cấu trúc Thư mục trong Subversion
- 28. Thiết lập cấu trúc thư mục dự án EmberJS?
- 29. Cấu trúc thư mục tĩnh trong Django 1.4?
- 30. Liệt kê cấu trúc thư mục trong Classic ASP
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