2009-01-07 42 views
9

Tôi vừa mới tìm ra đường cong học tập cho Java SE & không có vấn đề gì với quy ước Java thông thường cho tên gói, ví dụ: com.example.library_name_here.package_name_herelỗi quy ước tên gói java

Ngoại trừ.

Tôi đã nhận thấy việc không tuân thủ điều này trong một số gói khá nổi tiếng.

  • JLine: jline.*
  • JACOB: com.jacob.* (không có jacob.com)
  • JNA: com.sun.jna.* (từ chối trách nhiệm trên trang web nói LƯU Ý: Sun không được tài trợ dự án này, mặc dù tên gói (com.sun.jna) có thể ngụ ý theo cách khác.)

Vì vậy, tôi tự hỏi, có những trường hợp mà thông thường tên miền ngược quy ước phá vỡ, và có g ood cách để có được xung quanh nó? Các trường hợp duy nhất tôi có thể nghĩ đến xoay quanh vấn đề quyền sở hữu tên miền (ví dụ: bạn thay đổi tên dự án/tên miền, hoặc đã có một gói nổi tiếng có "quyền của người đổ vỡ" đối với miền của bạn hoặc quyền sở hữu miền của bạn chạy ra & ai đó khác chụp nó lên).

chỉnh sửa: nếu tôi sử dụng tên miền của công ty tôi, và chúng tôi được mua hoặc có một spin-off, chúng ta nên làm gì với tên gói? giữ chúng giống nhau hoặc đổi tên? (Tôi cho rằng việc đổi tên là xấu từ quan điểm mà các lớp được biên dịch tham chiếu đến gói đó sẽ bị mất)

+0

JUnit thường phạm sai lầm, nhưng đã sửa nó trong Junit 4 (trong khi vẫn giữ một số lớp trong gói cũ để tương thích ngược) –

Trả lời

2

Các gói được sử dụng để tránh sự mơ hồ và va chạm giữa các thành phần được xây dựng bởi các thực thể khác nhau.Miễn là bạn theo quy ước, và không ai sử dụng trái phép phần của bạn của chiếc bánh không gian tên gói, bạn không cần phải lo lắng về những gì người khác đã sử dụng.

2

Điều duy nhất quan trọng (IMHO) là các phần của tên gói được "sắp xếp" theo tầm quan trọng, nghĩa là bạn không kết thúc với gui.myprog, util.myprog, main.myprog nhưng với myprog.gui, myprog.util và myprog.main. Cho dù tên gói thực sự bắt đầu với một tên miền cấp cao theo sau là một tên miền là không quan tâm đến tôi.

+1

Thực ra, điều quan trọng là chúng không va chạm, do đó bạn phải có một số khiếu nại trên một cái tên. Sử dụng Jline. * Là không lành mạnh bởi vì nếu người khác là ngu ngốc, các ứng dụng của bạn không thể được sử dụng cùng nhau. –

12

Đó là quy ước đặt tên. Không có yêu cầu thực sự hoặc thậm chí mong đợi rằng tên gói bản đồ cho một tên miền.

+2

Tuy nhiên, có một đề xuất khá mạnh. –

+1

@sblundy, Không, thực sự, hoàn toàn là một * kỳ vọng * (không yêu cầu) rằng nó ánh xạ tới một tên miền. Không ai nhìn thấy com.name.product và xem xét một giây cho dù đó là name.com hay name.org (các công ty). Họ (tất cả chúng ta) giả sử name.com. –

1

Bạn không thể sử dụng từ khóa ngôn ngữ như các bộ phận của một tên gói, đó là một trường hợp quy ước tên miền không thể được áp dụng - may mắn lớn cho LONG Building Technologies

Nhưng sau đó, quy ước là chỉ vậy, một quy ước, và khá nhiều lý do duy nhất tại sao nó tồn tại là nó giảm thiểu cơ hội của các dự án khác nhau vô tình chọn cùng một tên gói. Nếu bạn không thể làm theo nó, nó không thực sự là một vấn đề lớn.

5

Ý tưởng chung là hai tổ chức sẽ không sở hữu cùng một tên miền, vì vậy việc sử dụng tên miền như là một phần của gói đảm bảo rằng không có xung đột vùng tên. Đây chỉ là một đề nghị tuy nhiên.

Có lý do chính đáng để ai đó có gói trong không gian tên mặt trời. Nếu họ đang cung cấp việc triển khai API công khai, thường cần phải triển khai các lớp trong không gian tên của API.

+0

Bạn có thể cung cấp các ví dụ về điều này không? Tôi mới vào cảnh Java, nhưng nói chung (không nhất thiết phải trong Java) Tôi không thể nhìn thấy một lý do hợp lý tại sao một thực hiện cần phải có một điều kiện tiên quyết để được trong cùng một không gian tên như API. –

3

Nếu bạn đang thực hiện theo cách của bạn lên đường cong học tập Java, tôi sẽ lo lắng về việc làm cho cấu trúc bao bì của bạn rõ ràng để bạn có thể dễ dàng tìm thấy lớp bạn đang tìm kiếm.