Làm cách nào tôi có thể tránh sử dụng tên riêng của mình trong các mã định danh, gói hoặc không gian tên của các dự án nguồn mở mà tôi tạo?


15

Tôi làm rất nhiều sự phát triển trong thời gian của riêng tôi. Những dự án tôi làm đều là để giải trí và học tập (cho đến nay). Tôi thường làm phát triển Java với Maven nhưng tôi cũng đã biết đến việc sử dụng .NET và Python. Tất cả các dự án tôi làm việc đều sử dụng giấy phép nguồn mở, mặc dù hầu hết chúng không nằm trong bất kỳ kho lưu trữ mã công khai nào.

Phát triển Java / Maven yêu cầu tôi sử dụng cấu trúc duy nhất groupId(ví dụ "com.mydomain") và packagecấu trúc (thư mục) duy nhất , thường chứa groupIdtrong khi phát triển .NET khuyến khích duy nhất namespacestrong đó tôi sử dụng các quy ước tương tự với packagekhái niệm Java . Để đảm bảo tính duy nhất, tôi thường chỉ sử dụng một trong những tên miền của mình với các phần được đảo ngược (ví dụ: "ca.jessewebb"); Tôi tin rằng đây là một thực tế rất phổ biến.

Tôi đang trong giai đoạn ban đầu để tạo một dự án Java / Maven mới, mã nguồn mở (hãy gọi nó là "newproj") và tôi muốn đưa nó lên GitHub. Tên người dùng của tôi trên GitHub là "jessewebb" vì vậy điều này sẽ cung cấp cho nó một URL như : https://github.com/jessewebb/newproj. Tôi không muốn đăng ký tên miền "newproj.com" vì vậy tôi đã quyết định sử dụng "ca.jessewebb" và "ca.jessewebb.newproj" làm groupIdpackage, tương ứng.

Tôi nhận ra rằng sự hiện diện của danh tính cá nhân của tôi trong mã và là một phần của nhà của dự án (trong URL GitHub) có thể sẽ khiến một người đóng góp tiềm năng nghĩ hai lần về việc tham gia vào dự án của tôi. Đây là một vấn đề, tôi không muốn nó là dự án của tôi . Thay vào đó, tôi muốn nếu tôi có thể, truyền tải thông điệp rằng tôi không sở hữu dự án. Bây giờ, thành thật mà nói, nó thực sự không phải là vấn đề lớn vì tôi nghi ngờ các dự án của tôi sẽ thu hút được nhiều sự tham gia của cộng đồng nhưng tôi cũng thấy đây là lý do nhiều hơn để tránh mọi khả năng ngăn cản những người đóng góp.

Một ví dụ khác, tôi đã tạo một dự án Google Code vài năm trước (hãy gọi nó là "oldproj"). Khi tôi tạo dự án, tôi biết rằng tôi sẽ lưu trữ nó trên Google Code nên tôi đã sử dụng tên groupIdvà gói của "com.googlecode.oldproj", ngược lại với tên miền mặc định Google Code cung cấp cho mọi dự án mới. Điều này hóa ra là một ý tưởng không tuyệt vời; Một năm sau, tôi đã chuyển mã sang một repo khác và tôi phải đổi tên các định danh này (tôi cũng không đến nhưng ...). Vào thời điểm đó, tôi không sở hữu bất kỳ tên miền nào và cuối cùng tôi đã mua tên miền "oldproj.com" và tôi đã sử dụng nó. Tôi thích điều này bởi vì nó mang lại cho dự án bản sắc riêng và tôi đã không dán tên của mình lên mã ở khắp mọi nơi. Tôi có thể dễ dàng đăng ký tên miền "jessewebb.ca" và sử dụng "ca.jessewebb.oldproj" làm tên gói nhưng tôi cũng không biết vì tôi cũng có cùng mối quan tâm.

Vì vậy, câu hỏi của tôi là ...

Làm cách nào tôi có thể tránh sử dụng tên (tên miền) của riêng mình khi tạo dự án nguồn mở trong khi vẫn duy trì tính duy nhất của gói / không gian tên?

Khi các dự án đạt được nhiều động lực hơn, sẽ rất hợp lý khi đăng ký tên miền nhưng có vẻ ngớ ngẩn và lãng phí tiền bạc để làm điều này sớm hơn. Tôi nhận ra rằng tôi thực sự không phải sở hữu tên miền để sử dụng nó trong mã nhưng điều đó cảm thấy sai và có thể dẫn đến một kẻ cướp giật từ bên dưới bạn trong lúc này. Những người khác làm gì về vấn đề nan giải này? Có các ví dụ về các dự án nguồn mở phổ biến (được sử dụng rộng rãi, cộng đồng lớn, v.v.) có chứa danh tính của nhà phát triển ban đầu như là một phần của (các) định danh riêng của nó không?


2
Whoa, khá lenghty, nhưng vẫn là một câu hỏi hay!
Marcel

1
Sử dụng UUID trong các gói / không gian tên của bạn? ;-)
Jeroen

Câu trả lời:


5

Trong các dự án của tôi, tôi đặt cho họ một cái tên nhưng không nhất thiết phải là một miền. Vì vậy, tên gói của tôi (và không gian tên) thường chỉ là "projectname.l Libraryname", bất kể mã được lưu trữ ở đâu.

Tôi đã quen với .NET, nơi điều này được xử lý khá tự do.


Tôi nghĩ rằng đây là một giải pháp tốt khi tôi không có hoặc (ngay lập tức) muốn một tên miền được đăng ký cho dự án. Tôi thậm chí có thể làm điều này khi tôi có một tên miền. Nó thậm chí sẽ giúp đảm bảo tôi sử dụng tên dự án duy nhất, điều này không bao giờ là điều xấu. Tôi có thể sẽ chấp nhận câu trả lời này sớm, trừ khi có câu trả lời hay hơn. Cảm ơn!
Jesse Webb

Vâng, các lập trình viên .NET làm điều này, nhưng nó không phải là một ý tưởng tốt. Nếu tên dự án là một từ được tạo ra, nó có thể hoạt động tốt, nhưng tôi ước tôi có một đô la cho mỗi dự án "Trình tải xuống" hoặc "Trình duyệt" mà tôi đã thấy.
Ross Patterson

1
Tôi đã bắt đầu sử dụng chiến lược này cho tất cả các dự án của mình. Tôi nghĩ ra một tên duy nhất cho các dự án, gần như một tên mã (xin lỗi vì chơi chữ) và sử dụng nó cho các gói / không gian tên của tôi. Tiết kiệm cho tôi phải lo lắng về tên miền, ít nhất là cho đến khi tôi muốn.
Jesse Webb

2

Tôi không thể nhớ nơi tôi đã nhìn thấy nó, nhưng tôi đã thấy nó được đề xuất sử dụng cấu trúc như thế này:

YourIdentifier.YourProduct.YourComponent

YourIdentifier có thể là một tên miền giống như bạn sở hữu, bí danh internet (khá độc đáo) của bạn, v.v. Tên thành phần được để lại cho mã "lõi" của sản phẩm. Chẳng hạn, tôi có một khung MVC nhỏ có tên là BarelyMVC, vì vậy tôi có các không gian tên như thế này trong đó:

Earlz.BarelyMVC
Earlz.BarelyMVC.Authentication
Earlz.BarelyMVC.Caching

v.v ... Bí danh trực tuyến của bạn trong hầu hết các trường hợp rất độc đáo để tránh xung đột giữa các nhà phát triển khác

Nếu bạn ngại sử dụng bí danh trực tuyến của riêng mình, thì hãy tạo một "nhãn" cho chính mình. Nó không phải được đăng ký chính thức như một công ty hoặc bất cứ điều gì (hoặc thậm chí là một tên miền). Ví dụ, Json.Netthư viện phổ biến sử dụng không gian tên Newtonsoft.Json. Rõ ràng nó dựa trên tên tác giả "newton", nhưng tôi không nghĩ có ai thực sự quan tâm đến điều đó. Và nếu bạn đã đăng ký một công ty chính thức, thì tất nhiên bạn có thể sử dụng nó. Ví dụ, hầu hết các API công khai do công ty tôi sản xuất đều có không gian tên bắt đầu bằng PreEmptiveSolutionstên của công ty


1
Rất phổ biến trong thế giới .NET, nơi mà tên miền ngược không bao giờ thực sự bắt kịp. Và miễn là "YourIdentifier" thực sự độc đáo, nó hoạt động. Nhưng ngay cả Newtonsoft cũng chỉ vô tình là duy nhất - James Newton-King không thực sự điều hành một công ty như vậy và thương hiệu của nó sẽ chỉ tồn tại ở New Zealand nếu anh ta làm như vậy.
Ross Patterson

1

Không có quy tắc nào cho thấy tên gói Java hoặc không gian tên .NET là tên miền. Thậm chí không có yêu cầu rằng chúng là duy nhất, mặc dù đó chắc chắn là một ý tưởng tốt. Tôi thực sự nghĩ rằng bạn đã đúng khi sử dụng com.googlecode.oldprojvà trong đôi giày của bạn, tôi sẽ không chuyển sang com.oldprojtrừ khi tôi đang cố gắng để công khai tên miền mới.


Tôi nhận ra rằng không có quy tắc nào là bạn phải sử dụng tên miền, nhưng tôi nghĩ đó là một thực tế rất phổ biến, ít nhất là trong thế giới Java và .NET, chỉ vì nó giúp đảm bảo tính duy nhất. Ngoài ra, bạn nói rằng bạn nghĩ tôi đã đúng khi sử dụng com.googlecode.oldproj, tại sao bạn nghĩ rằng đây là một ý tưởng tốt? Nhìn lại, tôi nghĩ thật là ngớ ngẩn khi buộc mã cho nhà cung cấp dịch vụ lưu trữ.
Jesse Webb

1
Vấn đề không phải là nó liên kết bạn với một số nhà cung cấp dịch vụ lưu trữ, vấn đề là nó là một định danh duy nhất theo quy ước đặc biệt cho dự án này. Đó là tất cả "com.jesseweb.oldproj", về mặt kỹ thuật. Vì vậy, vì bạn không muốn tên của mình gắn liền với nó, đó là một quyết định tốt. Các gói Java và không gian tên .NET không được coi là các biển chỉ dẫn hướng bạn đến một trang tải xuống , v.v. , chỉ là một mã định danh duy nhất theo quy ước.
Ross Patterson
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.