ฉันจะหลีกเลี่ยงการใช้ชื่อของตัวเองในตัวระบุแพ็คเกจหรือเนมสเปซของโครงการโอเพ่นซอร์สที่ฉันสร้างได้อย่างไร


15

ฉันพัฒนาไปมากในเวลาของตัวเอง โครงการเหล่านี้ที่ฉันทำมีทั้งหมดเพื่อความสนุกสนานและการเรียนรู้ (จนถึงตอนนี้) ฉันมักจะพัฒนา Java กับ Maven แต่ฉันก็รู้จักตะลุยใน. NET และ Python โครงการทั้งหมดที่ฉันทำงานเกี่ยวกับการอนุญาตให้ใช้งานโอเพ่นซอร์สแม้ว่าส่วนใหญ่จะไม่ได้อยู่ในที่เก็บรหัสสาธารณะใด ๆ

การพัฒนา Java / Maven ต้องการให้ฉันใช้โครงสร้างที่ไม่ซ้ำกันgroupId(เช่น "com.mydomain") และpackageโครงสร้าง (ไดเรกทอรี) ที่ไม่ซ้ำกันซึ่งโดยทั่วไปจะมีการgroupIdพัฒนาในขณะที่. NET สนับสนุนเฉพาะnamespacesในการใช้packageแนวคิดแบบเดียวกันกับแนวคิดJava เพื่อให้แน่ใจว่ามีลักษณะเฉพาะฉันมักจะใช้ชื่อโดเมนของฉันกับส่วนที่กลับรายการ (เช่น "ca.jessewebb") ฉันเชื่อว่านี่เป็นวิธีปฏิบัติทั่วไป

ฉันอยู่ในช่วงเริ่มต้นของการสร้างโปรเจ็กต์โอเพนซอร์สใหม่ Java / Maven (ลองเรียกมันว่า "newproj") และฉันต้องการที่จะวางมันบน GitHub ชื่อผู้ใช้ของฉันบน GitHub คือ "jessewebb" ดังนั้นนี้จะให้มันเหมือน https://github.com/jessewebb/newprojURL: ฉันไม่ต้องการรบกวนการลงทะเบียนชื่อโดเมน "newproj.com" ดังนั้นฉันจึงตัดสินใจใช้ "ca.jessewebb" และ "ca.jessewebb.newproj" เป็นgroupIdและpackageตามลำดับ

มันเกิดขึ้นกับฉันว่าการมีตัวตนส่วนบุคคลของฉันในรหัสและเป็นส่วนหนึ่งของบ้านของโครงการ (ใน URL ของ GitHub) จะทำให้ผู้สนับสนุนที่มีศักยภาพคิดสองครั้งเกี่ยวกับการมีส่วนร่วมกับโครงการของฉัน นี่เป็นปัญหาฉันไม่ต้องการให้เป็นโครงการของฉัน ฉันต้องการถ้าฉันสามารถถ่ายทอดข้อความที่ฉันไม่ได้เป็นเจ้าของโครงการแทน ตอนนี้ในความซื่อสัตย์สุจริตทุกมันคือเรื่องจริงไม่ว่าใหญ่ของการจัดการเพราะผมสงสัยโครงการของฉันจะเก็บส่วนร่วมของชุมชนมาก แต่ฉันยังเห็นนี้เป็นแม้กระทั่งเพิ่มเติมของเหตุผลที่จะหลีกเลี่ยงการสกัดกั้นผู้ที่จะร่วมสมทบใด ๆ

อีกตัวอย่างหนึ่งฉันสร้างโครงการ Google Code เมื่อไม่กี่ปีที่ผ่านมา (เรียกว่า "oldproj") เมื่อฉันสร้างโครงการฉันรู้ว่าฉันกำลังจะโฮสต์มันบน Google Code ดังนั้นฉันจึงใช้groupIdและชื่อแพคเกจของ "com.googlecode.oldproj" ซึ่งเป็นสิ่งที่ตรงกันข้ามกับชื่อโดเมนเริ่มต้นที่ Google Code ให้ทุกโครงการใหม่ สิ่งนี้กลายเป็นความคิดที่ไม่ดีนัก หรือดังนั้นปีต่อมาผมย้ายรหัสที่จะซื้อคืนที่แตกต่างกันและผมก็มีการเปลี่ยนชื่อตัวบ่งชี้เหล่านี้ (ดีผมไม่ได้มีถึง แต่ ... ) ในตอนนั้นฉันไม่ได้เป็นเจ้าของชื่อโดเมนใด ๆ และฉันก็จบลงด้วยการซื้อชื่อโดเมน "oldproj.com" และฉันใช้มัน ฉันชอบสิ่งนี้เพราะมันทำให้โครงการมีเอกลักษณ์เป็นของตัวเองและฉันไม่ได้ปั๊มชื่อของฉันลงบนรหัสทุกที่ ฉันสามารถจดทะเบียนชื่อโดเมน "jessewebb.ca" ได้อย่างง่ายดายและใช้ "ca.jessewebb.oldproj" เป็นชื่อแพ็คเกจ แต่ฉันไม่ได้เพราะฉันมีข้อกังวลเดียวกันด้วยเช่นกัน

ดังนั้นคำถามของฉันคือ ...

ฉันจะหลีกเลี่ยงการใช้ชื่อ (โดเมน) ของตัวเองเมื่อสร้างโครงการโอเพ่นซอร์สในขณะที่ยังคงความเป็นเอกลักษณ์ของแพ็คเกจ / เนมสเปซได้อย่างไร

เมื่อโครงการได้รับแรงกระตุ้นมากขึ้นการลงทะเบียนชื่อโดเมน แต่ดูเหมือนว่าโง่และเสียเงินในการทำสิ่งนี้ก่อนหน้านี้ ฉันรู้ว่าฉันไม่จริงต้องเป็นเจ้าของชื่อโดเมนที่จะใช้ในรหัส แต่ที่รู้สึกผิดและสามารถนำไปสู่ถิ่นฐานในที่สาธารณะคว้ามันมาจากใต้คุณในขณะเดียวกัน คนอื่นทำอะไรเกี่ยวกับภาวะที่กลืนไม่เข้าคายไม่ออกนี้ มีตัวอย่างของโครงการโอเพ่นซอร์สที่เป็นที่นิยม (ใช้กันอย่างแพร่หลายชุมชนขนาดใหญ่ ฯลฯ ) ที่มีตัวตนของนักพัฒนาดั้งเดิมซึ่งเป็นส่วนหนึ่งของตัวระบุของมันเองหรือไม่?


2
โอ้โหค่อนข้างสุภาพ แต่ก็ยังเป็นคำถามที่ดี!
Marcel

1
ใช้ UUID ในแพ็คเกจ / เนมสเปซของคุณหรือไม่ ;-)
Jeroen

คำตอบ:


5

ในโครงการของฉันฉันให้ชื่อพวกเขา แต่ไม่จำเป็นต้องเป็นโดเมน ดังนั้นชื่อแพคเกจของฉัน (และเนมสเปซ) จึงมักจะเป็น "projectname.libraryname" โดยไม่คำนึงถึงตำแหน่งที่โฮสต์โค้ด

ฉันคุ้นเคยกับ. NET ซึ่งเป็นสิ่งที่จัดการได้อย่างอิสระ


ฉันคิดว่านี่เป็นวิธีแก้ปัญหาที่ดีเมื่อฉันไม่มีหรือ (ทันที) ต้องการโดเมนที่ลงทะเบียนสำหรับโครงการ ฉันสามารถทำสิ่งนี้ได้เมื่อฉันมีโดเมน มันจะช่วยให้แน่ใจว่าฉันใช้ชื่อโครงการที่ไม่เหมือนใครซึ่งไม่เคยเป็นเรื่องเลวร้ายเลย ฉันอาจจะยอมรับคำตอบนี้ในไม่ช้าเว้นแต่จะมีคนที่ดีขึ้นมาบ้าง ขอบคุณ!
Jesse Webb

ใช่. โปรแกรมเมอร์ NET ทำสิ่งนี้ แต่มันไม่ใช่ความคิดที่ดี หากชื่อโครงการเป็นคำที่สร้างขึ้นมันสามารถใช้งานได้ แต่ฉันหวังว่าฉันจะได้เงินหนึ่งดอลลาร์สำหรับทุกโครงการ "ดาวน์โหลด" หรือ "เบราว์เซอร์" ที่ฉันเคยเห็น
Ross Patterson

1
ฉันเริ่มใช้กลยุทธ์นี้สำหรับทุกโครงการของฉัน ฉันสร้างชื่อเฉพาะสำหรับโปรเจ็กต์เกือบจะเป็นโค้ดเนม (ให้อภัยปุน) และใช้มันสำหรับแพ็คเกจ / เนมสเปซของฉัน ช่วยให้ฉันต้องกังวลเกี่ยวกับชื่อโดเมนอย่างน้อยก็จนกว่าจะถึงเวลาที่ฉันต้องการ
Jesse Webb

2

ฉันจำไม่ได้ว่าฉันเห็นมันที่ไหน แต่ฉันเห็นว่ามันแนะนำให้ใช้โครงสร้างแบบนี้:

YourIdentifier.YourProduct.YourComponent

YourIdentifier สามารถเป็นเหมือนโดเมนที่คุณเป็นเจ้าของนามแฝงอินเทอร์เน็ต (ไม่เหมือนใคร) และอื่น ๆ ชื่อส่วนประกอบถูกทิ้งไว้สำหรับรหัส "หลัก" ของผลิตภัณฑ์ของคุณ ตัวอย่างเช่นฉันมีกรอบ MVC ขนาดเล็กที่ชื่อว่า BarelyMVC ดังนั้นฉันจึงมีเนมสเปซดังนี้:

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

ฯลฯ เป็นต้นนามแฝงออนไลน์ของคุณในกรณีส่วนใหญ่มีเอกลักษณ์มากมายเพื่อหลีกเลี่ยงความขัดแย้งระหว่างผู้พัฒนารายอื่น

หากคุณกลัวที่จะใช้นามแฝงออนไลน์ของคุณเองให้สร้าง "ป้ายกำกับ" สำหรับตัวคุณเอง ไม่จำเป็นต้องจดทะเบียนอย่างเป็นทางการในฐานะ บริษัท หรืออะไรก็ตาม (หรือแม้กระทั่งโดเมน) ยกตัวอย่างเช่นที่เป็นที่นิยมJson.Netห้องสมุดใช้การ Newtonsoft.Jsonnamespace เห็นได้ชัดว่ามันขึ้นอยู่กับชื่อผู้แต่ง "นิวตัน" แต่ฉันไม่คิดว่าจะมีใครสนใจ และถ้าคุณมี บริษัท ที่จดทะเบียนอย่างเป็นทางการคุณก็สามารถใช้มันได้ อินสแตนซ์สาธารณะส่วนใหญ่ที่ผลิตโดย บริษัท ของฉันเช่นมีเนมสเปซเริ่มต้นด้วยPreEmptiveSolutionsชื่อของ บริษัท


1
พบเห็นได้ทั่วไปในโลก. NET ซึ่งสิ่งที่อยู่ด้านหลังชื่อโดเมนไม่ติดอยู่จริงๆ และตราบใดที่ "YourIdentifier" นั้นมีความเป็นเอกลักษณ์ แต่ถึงแม้ Newtonsoft จะมีลักษณะเฉพาะโดยบังเอิญเท่านั้น - James Newton-King ไม่ได้บริหาร บริษัท ดังกล่าวจริงและเครื่องหมายการค้าของมันจะมีอยู่เฉพาะในนิวซีแลนด์ถ้าเขาทำ
Ross Patterson

1

ไม่มีกฎที่ชื่อแพ็คเกจ Java หรือ. NET namespaces เป็นชื่อโดเมน ไม่มีแม้แต่ข้อกำหนดที่พวกเขาจะไม่ซ้ำกันแม้ว่าจะเป็นความคิดที่ดีแน่นอน ที่จริงผมคิดว่าคุณมีสิทธิที่จะใช้com.googlecode.oldprojและในรองเท้าของคุณฉันจะไม่ได้เปลี่ยนไปcom.oldprojถ้าฉันได้พยายามที่จะได้รับการเผยแพร่สำหรับชื่อโดเมนใหม่


ฉันรู้ว่าไม่มีกฎที่คุณต้องใช้ชื่อโดเมน แต่ฉันคิดว่ามันเป็นวิธีปฏิบัติที่ใช้กันทั่วไปอย่างน้อยในโลกของ Java และ. NET เพียงเพราะมันช่วยให้แน่ใจว่ามีความเป็นเอกลักษณ์ นอกจากนี้คุณบอกว่าคุณคิดว่าฉันถูกต้องใช้com.googlecode.oldprojทำไมคุณคิดว่านี่เป็นความคิดที่ดี? เมื่อมองย้อนกลับไปฉันคิดว่ามันโง่มากที่จะผูกรหัสกับผู้ให้บริการโฮสติ้ง
Jesse Webb

1
ประเด็นก็คือมันไม่ได้เชื่อมโยงคุณกับผู้ให้บริการโฮสติ้งบางคนประเด็นก็คือมันเป็นตัวบ่งชี้เอกลักษณ์ตามอัตภาพที่แปลกประหลาดกับโครงการนี้ ซึ่งทั้งหมดคือ "com.jesseweb.oldproj" คือเทคนิค ดังนั้นเมื่อคุณไม่ต้องการให้ชื่อของคุณแนบมามันเป็นการตัดสินใจที่ดี แพ็คเกจ Java และ. NET namespaces ไม่ควรที่จะเป็นป้ายบอกทางที่นำคุณไปยังเว็บไซต์ดาวน์โหลดเป็นต้นเพียงแค่ตัวระบุที่ไม่ซ้ำกันตามแบบแผน
Ross Patterson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.