Tại sao nhiều không gian tên bắt đầu bằng com


45

Tôi đã nhận thấy rằng rất nhiều công ty sử dụng không gian tên "tên miền ngược" và tôi tò mò không biết thực tiễn đó bắt nguồn từ đâu và tại sao nó tiếp tục. Có phải nó chỉ tiếp tục vì thực hành vẹt, hoặc có một khái niệm kiến ​​trúc nổi bật mà tôi có thể bị thiếu ở đây?

Cũng lưu ý các câu hỏi như: https://stackoverflow.com/questions/189209/do-you-really-use-your-reverse-domain-for-package-naming-in-java loại câu trả lời của tôi nhưng không phải là 100 %

(Nếu điều đó làm bạn cảm thấy tốt hơn, tôi thực sự tò mò liệu tôi có nên sử dụng nó cho các nỗ lực đặt tên javascript của mình không, nhưng tôi tò mò hơn về việc khi nào và tại sao, và điều đó sẽ giúp hướng dẫn tôi về câu trả lời javascript, nota lợi ích: "cửa sổ")

Ví dụ về thực hành này mở rộng đến các thư mục và tệp: http://imgur.com/jtdXo


1
Điều này thật kỳ lạ, tôi chưa bao giờ thấy điều này trước đây .. bây giờ tôi tò mò.
Jimmy Hoffa

Câu trả lời:


54

Ký hiệu tên miền ngược có nguồn gốc từ Java, nhưng được sử dụng rộng rãi trong nhiều nền tảng, chẳng hạn như Gói Android, Gói Mac OS X, JavaScript, ActionScript, v.v.

Việc thực hành là vô cùng hữu ích vì nó cung cấp một hệ thống phi tập trung cho phần mềm đặt tên. Không cần phải áp dụng cho một cơ quan tập trung cho một không gian tên; chỉ cần sử dụng tên miền bạn sở hữu (đảo ngược) và quản lý tên miền đó trong tổ chức của riêng bạn. Bằng cách đặt tên các gói như thế này, người ta có thể gần như chắc chắn rằng mã sẽ không xung đột với các gói khác.

Từ Hướng dẫn Java của Oracle :

Các công ty sử dụng tên miền Internet đảo ngược của họ để bắt đầu tên gói của họ, ví dụ: com.example.mypackage cho gói có tên mypackage được tạo bởi một lập trình viên tại example.com.

Xung đột tên xảy ra trong một công ty duy nhất cần được xử lý theo quy ước trong công ty đó, có thể bằng cách bao gồm tên vùng hoặc tên dự án sau tên công ty (ví dụ: com.example.region.mypackage).

Đó là nhiều hơn một thực hành vẹt, đó là một thực hành tốt bởi vì đó là một không gian tên đầy đủ và cụ thể . Nếu có hai công ty tên Acme và cả hai đều chọn không gian tên acme., mã của họ sẽ xung đột. Nhưng chỉ một trong những công ty đó có thể sở hữu tên miền acme.com , vì vậy họ có thể sử dụng com.acme.không gian tên.

Đảo ngược tên miền cho phép kiến ​​trúc từ trên xuống. comsẽ chứa mã cho các công ty (hoặc bất kỳ ai sở hữu tên miền .com) và bên dưới tên công ty (tên miền) đó. Sau đó, sâu hơn trong đó sẽ là cấu trúc của tổ chức và / hoặc không gian tên thực tế. (Ví dụ, nếu nó là mã từ một mạng lưới gọi là internal.acme.com , cung cấp cho bộ phận này của mình phụ namespace của com.acme.) Từ trên xuống Cấu trúc này được sử dụng trong một số ứng dụng, bao gồm cả quản trị hệ thống. (Nó tương tự như tra cứu địa chỉ IP đảo ngược.)

Cá nhân, tôi sử dụng nó cho tất cả các mã JavaScript mới mà tôi viết cho công ty của mình. Nó đảm bảo rằng mã sẽ không bao giờ xung đột với bất kỳ mã nào khác, ngay cả khi sau đó tôi viết cùng mã cho một công ty khác. Nó có thể làm cho việc truy cập mã trở nên cồng kềnh (gõ com.digitalfruition.có thể hơi nhiều) nhưng điều đó có thể dễ dàng được thực hiện với một bao đóng và một biến cục bộ ( var DF = com.digitalfruition).


Tôi nên nghĩ đến việc thay đổi tên gói ngẫu nhiên của ứng dụng Android của mình ... hoặc mua tên miền đó. :(
jadkik94

Tôi tự hỏi nếu có ai tìm ra cách giải quyết vấn đề có tên công ty bắt đầu bằng một số như 123ABC.com, bạn nên sử dụng quy ước đặt tên nào trong trường hợp này, trong đó Java sẽ không cho phép bạn có bất kỳ tên lớp nào bắt đầu bằng một số?!
sorin

1
@sorin - tiền tố phần có liên quan của tên gói của bạn với dấu gạch dưới. Ví dụ com._123ABC. Ví dụ tại docs.oracle.com/javase/tutorial/java/package/namingpkgs.html .
cxw

13

Đó là bởi vì sử dụng không gian tên làm giảm rất nhiều khả năng xung đột tên và vì sử dụng tên miền của bạn (đã được quy định) là một cách tốt để tạo không gian tên toàn cầu .

Bằng cách đảo ngược phần tên miền trong không gian tên, bạn làm cho nó có thể sắp xếp được; tất cả các tên thuộc về khối nhỏ của vũ trụ không gian tên được sắp xếp cùng nhau.

Và cuối cùng nhưng không kém phần quan trọng, TLD .comlà TLD phổ biến nhất trên internet, do đó, nó được sử dụng bởi nhiều nhà phát triển phần mềm hơn bất kỳ TLD nào khác.

Trong mọi trường hợp, thực tiễn bắt đầu với Java, trong đó mỗi lớp cần có tệp riêng của nó và để chơi trong một hệ sinh thái lớn hơn, sơ đồ không gian tên toàn cầu đã được giới thiệu để giúp các lớp dễ dàng đủ điều kiện.


Được thực thi nghiêm ngặt? Giả sử tôi cố gắng tạo gói com.xyz nhưng không sở hữu tên miền, android sẽ ngăn tôi làm điều đó chứ?
VarunAgw

@VarunAgw không, bạn có thể chơi bẩn và buộc xung đột.
Martijn Pieters

Khác với những cuộc xung đột, nó có ý nghĩa hơn để sử dụng OrgName.ProjectName cho các dự án nhỏ sau đó
VarunAgw

Bạn sẽ phải đối mặt với quy ước, nhưng đó là cuộc gọi của bạn.
Martijn Pieters

2

Endianness

Tôi không phải là một chuyên gia java, nhưng theo mô hình chung, đây chỉ là một hoán vị khác của big-endian và little endian, nói một cách ẩn dụ.

"Endianness" đôi khi được sử dụng để mô tả thứ tự các thành phần của một tên miền, ví dụ 'en.wikipedia.org' (dạng 'end-endian' hiện đại thông thường) so với DNS ngược 'org.wikipedia.en' ( 'big endian', được sử dụng để đặt tên các thành phần, gói hoặc loại trong hệ thống máy tính, ví dụ như các gói Java, tệp ".plist" của Macintosh, v.v.). Các URL có thể được coi là 'big endian', mặc dù phần máy chủ có thể là tên DNS 'endian endian'.

Trong trường hợp này, có lẽ là vì mục đích tổ chức để cho phép phân nhóm / phân nhánh cây tự nhiên. Nó giữ mọi thứ gọn gàng ở mức cao hơn, và bạn đào sâu để biết chi tiết cụ thể hơn.

Sự thay thế sẽ rất bằng phẳng và việc phân nhóm có ý nghĩa / có khả năng hữu ích sẽ phải được giải thích so với nội tại của cấu trúc.


7
Golly, chưa bao giờ nghe thấy endianness được sử dụng để đề cập đến sơ đồ không gian tên miền ngược ..
Martijn Pieters

Tôi cũng không, cho đến khi một đồng nghiệp ném nó ra trong một cuộc trò chuyện và nảy sinh một số cuộc thảo luận tiếp tuyến. Anh ấy đã giới thiệu wikipedia (như được liên kết đến), vì vậy rõ ràng nó không phải là chưa từng nghe thấy. Tôi đã phải thư giãn đầu óc của mình một chút để phù hợp với quan điểm này, nhưng tôi có thể sống với nó.
Ed Hastings

3
Vâng, cuộc thảo luận về endianness DNS này xuất hiện định kỳ. Mạng "Janus" đã tồn tại từ lâu ở Anh có tên gọi khác, và họ luôn nói rằng đám đông ARPANet có những điều ngược lại.
Ross Patterson

3
@RossPatterson: Hệ thống tập tin, hệ điều hành, hệ thống phân loại mặt, hệ thống lưu trữ thư viện, số điện thoại, hầu hết chúng bắt đầu với root ở bên trái và sau đó cụ thể hơn. Heck, thậm chí hầu hết các tập tin cấu hình máy chủ tên DNS làm điều đó theo cách đó. Vì vậy, tôi đồng ý với đám đông Janus.
Jörg W Mittag

1
@RossPatterson Với tên của họ, tôi ngạc nhiên rằng Janus có ý kiến ​​về những gì được coi là "cách đúng đắn".
TRiG

0

Tôi nghĩ rằng một chi tiết nhỏ đã không được đề cập trong các câu trả lời khác: Lý do mà TLD .com là phổ biến nhất, là vào thời kỳ đầu của Web, các trình duyệt Web như Netscape Navigator "tự động thêm" .com nếu nó bị thiếu trong địa chỉ (ví dụ: nếu việc tra cứu tên không thành công). Vì vậy, nếu bạn nhập "phần mềm chia sẻ", nó sẽ được mở rộng thành " http : // sharnterest.com " (hoặc " http: //www.sharnterest.com "; Tôi không nhớ chi tiết www). tên miền .com có ​​lẽ vẫn là phổ biến nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.