Tôi đã suy nghĩ một số về "thực hành tốt" về cấu trúc gói trong gói osgi. Hiện tại, trung bình, chúng tôi có 8-12 lớp học cho mỗi nhóm. Một trong những sáng kiến / đề xuất của tôi là có hai gói; com.company_name.osgi.services.api (đối với các lớp/giao diện liên quan đến api (được xuất ra bên ngoài) và một gói com.company_name.osgi.services.impl để triển khai (không được xuất)). Ưu điểm của điều này là gì? Bất cứ một đề nghị nào khác?Cấu trúc gói của gói OSGi
Trả lời
Bạn cũng có thể xem xét đặt các giao diện trong com.company_name.subsystem
và triển khai trong com.company_name.subsystem.impl
, mã cụ thể OSGI, nếu có, có thể là com.company_name.subsystem.osgi
. Thỉnh thoảng bạn có thể triển khai nhiều giao diện giống nhau. Trong trường hợp này, bạn có thể xem xét - com.company_name.subsystem.impl1
và com.company_name.subsystem.impl2
, ví dụ:
com.company.scm // the scm api
com.company.scm.git // its git implementaton
com.company.scm.svn // its subversion implementation
com.company.scm.osgi // the place to put an OSGI Activator
trong cấu trúc gói cảm giác này có thể là OSGi thuyết bất khả tri, nếu bạn sau này chuyển sang một container khác nhau, bạn chỉ cần đặt thêm
com.company.scm.sca // or whatever component model you might think of
Luôn có api
và impl
trong tên gói của bạn có thể gây phiền toái. Nếu nghi ngờ sử dụng impl
nhưng không sử dụng api
.
Đây không phải là số lớp quan trọng mà là các khái niệm. Theo tôi, bạn nên có một thực thể khái niệm trong một gói. Trong một số trường hợp, đây có thể chỉ là một vài lớp trong một số gói khác với 100 lớp.
Điều quan trọng là bạn tách API và triển khai. Một gói chứa API của khái niệm của bạn và API kia thực hiện. Như thế này, bạn có thể cung cấp các triển khai khác nhau cho một API được xác định rõ. Trong một số trường hợp, điều này thậm chí có thể cần thiết nếu bạn muốn truy cập các dịch vụ từ một gói từ xa (ví dụ: R-OGSi)
Các gói API sau đó được sử dụng bằng cách chia sẻ dịch vụ. Cách tốt nhất để khám phá những khả năng đó là nhìn vào ServiceTrackers.
Trong trường hợp của bạn, bạn có thể thực hiện trong cùng một gói, nhưng tất cả các lớp học của nó là "gói được bảo vệ". Bằng cách này, bạn có thể xuất gói và việc triển khai sẽ không hiển thị bên ngoài, ngay cả khi không sử dụng OSGi (nhưng dưới dạng tệp jar bình thường).
- 1. Cấu trúc gói xây dựng với các gói con/gói
- 2. Bắt đầu gói OSGi
- 3. Thử nghiệm và cấu trúc gói python
- 4. Chạy gói osgi từ dòng lệnh
- 5. Cấu trúc gói Android Thực tiễn tốt nhất
- 6. Làm cách nào để nhập cùng một gói từ các gói osgi khác nhau?
- 7. Cách tạo tệp jar với cấu trúc gói?
- 8. Thêm gói vào cấu trúc dự án Java
- 9. Cấu trúc "đóng gói" trong C là gì?
- 10. NoClassDefFoundError khi chạy một gói OSGI như jar cổ điển
- 11. Vấn đề với việc cập nhật gói osgi
- 12. JSP trong OSGi: Cách tải TLD từ các gói?
- 13. Tải DLL (sử dụng JNA) bên trong một gói OSGi
- 14. Làm cách nào để truy cập tệp trong gói OSGi?
- 15. Truy cập tài nguyên trong một gói osgi khác?
- 16. cách gói osgi được sử dụng bởi sling
- 17. truy cập ngữ cảnh mùa xuân trong gói OSGi
- 18. Tìm tệp và thư mục trong Gói OSGI
- 19. xcode - sao chép cấu trúc thư mục vào gói ứng dụng của tôi
- 20. SF2: Cho phép người dùng định cấu hình gói mà không cần kiểm tra một số cấu phần của gói
- 21. OSGi + Logback + slf4j - Cấu hình chạy Eclipse
- 22. Có xây dựng Maven cho eclipselink làm cho các gói OSGi chạy trong Felix và các gói khác không?
- 23. Gói Java trong gói?
- 24. Cách cấu trúc các gói python mà không lặp lại tên cấp cao nhất để nhập
- 25. Hướng dẫn đơn giản để tạo cấu trúc gói Python và trứng là gì?
- 26. Thay thế cấu trúc gói bằng khai báo kiểu trong Go
- 27. Làm thế nào để khai báo cấu trúc đóng gói (không có đệm) cho LLVM?
- 28. Cấu hình nhật thực nhật thực osgi
- 29. thực hành tốt nhất Android cho vấn đề cấu trúc gói
- 30. C/C++: Đóng gói hoặc đệm dữ liệu trong một cấu trúc