ข้อตกลงชื่อแพ็คเกจ Java มีข้อบกพร่องหรือไม่ [ปิด]


28

เราทุกคนต่างคุ้นเคยกับแบบแผนของชื่อแพ็คเกจ Java ในการเปลี่ยนชื่อโดเมน คือจะตามแบบแผนเลือกที่จะมีแพคเกจwww.evilcorp.com Java ของพวกเขาcom.evilcorp.stuff

มากขึ้นฉันจะเบื่อกับสิ่งนี้ ในฐานะโปรแกรมเมอร์เชิงพาณิชย์ฉันพบครั้งแล้วครั้งเล่าว่าชื่อแพคเกจซอฟต์แวร์นั้นไม่เกี่ยวข้องอย่างสมบูรณ์เนื่องจากการเปลี่ยนโฉมใหม่การซื้อกิจการหรือคล้ายกัน

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

ปัญหาที่เกิดขึ้นมักจะแย่ลงโดยโครงการซอฟต์แวร์ที่นำฝ่ายการตลาดของการใช้ชื่อดูพวกเขาใช้อ้างถึงโครงการบางอย่าง ชื่อที่เปลี่ยนโดยไม่ล้มเหลว 3 เดือนเพื่อให้เสื้อผ้าใหม่ของจักรพรรดิรู้สึกสดชื่นและใหม่

ด้วยเหตุนี้ฉันส่วนใหญ่หยุดใช้โดเมนย้อนกลับเป็นชื่อแพคเกจ จริงอยู่ที่ว่าถ้าทำในปริมาณมากจะมีความเสี่ยงต่อการชนกันของชื่อ แต่แน่นอนว่าสิ่งนี้จะบรรเทาลงได้ด้วยการใช้ชื่อซอฟต์แวร์ "พิเศษ" หลีกเลี่ยงคำทั่วไปหรือใช้โดเมนย้อนกลับสำหรับโครงการที่ตั้งใจจะขาย / เปิดเป็นห้องสมุด .

ความคิดอื่น ๆ?


2
We're all familiar with the Java package name convention of turning the domain name around.- อืม .. เราไม่ได้ ... :)
ดร. ฮันนิบาลเล็คเตอร์

8
@dr Hannibal Lecter: ค่อนข้างง่าย Java (ที่เว็บไซต์ Java.com) com.java.etc.etcชื่อแพคเกจของพวกเขา อาปาเช่ (ที่เว็บไซต์ Apache.org) org.apache.etc.etcที่ชื่อแพคเกจของพวกเขา คุณเห็นรูปแบบ
doppelgreener

3
@dr Hannibal ผู้บรรยาย: Cf. docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
user359996

1
"ในโลกโอเพนซอร์สมีการเปลี่ยนแปลงชื่อน้อยลง" - แม้จะมีปัญหาบ่อยครั้งที่ฉันเห็นโครงการที่กำลังพูด github แต่ชื่อแพ็คเกจของพวกเขาเปิดเผยว่าพวกเขาเคยอยู่ที่ด้านหลังของ net.sourceforge.xxx หรือ com googlecode.xxx
nafg

@nafg - ถูกต้อง นี่คือเหตุผลที่ฉันมักจะลงทะเบียนชื่อโดเมนของตัวเองสำหรับโครงการโอเพนซอร์ซที่ฉันเริ่มทำงานในวันนี้เพราะฉันไม่ต้องการผูกตัวตนกับ บริษัท บางแห่ง (ไม่ว่าจะชอบ sourceforge หรือ Github ที่ให้บริการด้วย บริการหรืออย่าง บริษัท ของฉันเองที่ให้แรงบันดาลใจดั้งเดิมสำหรับการพัฒนามัน) มันต้องมีอิสระที่จะเป็นของตัวเอง
จูลส์

คำตอบ:


23

ฉันจะเสนอราคาคำแนะนำที่ Microsoft ให้สำหรับ namespaces (แพ็คเกจของ. NET) ซึ่งไม่มีแบบแผนของชื่อโดเมน ฉันคิดว่ามันเป็นคำแนะนำที่ดีสำหรับแพ็คเกจ Java เช่นกันเนื่องจากฉันไม่เชื่อว่าชื่อโดเมนจะแสดงถึงตัวตนที่มั่นคงและมั่นคง

รูปแบบทั่วไปสำหรับชื่อเนมสเปซมีดังนี้:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

ตัวอย่างเช่นMicrosoft.WindowsMobile.DirectX.

ใช้ชื่อเนมสเปซนำหน้าด้วยชื่อ บริษัท เพื่อป้องกันเนมสเปซจาก บริษัท ต่าง ๆ ไม่ให้มีชื่อและคำนำหน้าเหมือนกัน

ใช้ชื่อผลิตภัณฑ์ที่มั่นคงและไม่ขึ้นกับเวอร์ชันที่ระดับที่สองของชื่อเนมสเปซ

อย่าใช้ลำดับชั้นขององค์กรเป็นพื้นฐานสำหรับชื่อในลำดับชั้นของเนมสเปซเพราะชื่อกลุ่มภายในองค์กรมักมีอายุสั้น

ชื่อเนมสเปซเป็นตัวระบุที่มีอายุการใช้งานยาวนานและไม่มีการเปลี่ยนแปลง เมื่อองค์กรวิวัฒนาการการเปลี่ยนแปลงไม่ควรทำให้ชื่อเนมสเปซล้าสมัย

หากชื่อ บริษัท ของคุณไม่เสถียรคุณอาจต้องการเริ่มต้นด้วยชื่อผลิตภัณฑ์


3
Microsoft แนะนำอะไรให้คุณถ้า บริษัท อื่นมีชื่อเหมือนกับคุณ

25
@ Thorbjørn - การดำเนินคดี
RevBingo

9
@ Thorbjørn: เนมสเปซซึ่งแตกต่างจากโดเมนไม่ใช่ใครและไม่สามารถเป็นเจ้าของได้ มันเป็นเพียงการแบ่งตรรกะหรือการจัดหมวดหมู่ของรหัส โอกาสในการปะทะกันระหว่างคุณกับ บริษัท อื่น ๆ นั้นเข้าใกล้ศูนย์เว้นแต่ว่า บริษัท อื่นจะเกิดขึ้นในการพัฒนาซอฟต์แวร์ในเทคโนโลยีเดียวกันและมีข้อเสนอที่คล้ายกัน (โดยย่อ - คู่แข่งของคุณ) ในกรณีนี้ฉันจะรับข้อเสนอแนะของ RebBingo เว้นแต่ว่าคุณจะโอเคกับ บริษัท คู่แข่งที่มีชื่อเหมือนกับ บริษัท ของคุณ
Allon Guralnek

4
เป็นแหลมออกในคำตอบ @ Thorbjørnของปัญหา Java การตั้งชื่อแก้สนธิสัญญาไม่ได้รับประกันความมั่นคงแต่รับประกันเอกลักษณ์ หมายเหตุการค้ำประกันการประชุมไมโครซอฟท์ไม่
359996

4
@ user359996: อย่างที่ฉันพูดฉันไม่เห็นว่าทำไมความเป็นเอกลักษณ์สากลเป็นปัญหาที่ต้องแก้ไข เหตุใดคุณจึงต้องการชื่อที่ไม่ซ้ำกันระหว่างฐานรหัสที่ไม่เกิดร่วมกัน? และสไตล์ของ Java ไม่ได้รับประกันว่าจะเป็นเพราะโดเมนเนมสามารถสลับมือได้ ผู้พัฒนาที่เป็นเจ้าของ jUtils.com สามารถพัฒนา com.jutils. * ไลบรารี่ที่มีผู้ใช้จำนวนมากและขายโดเมนของเขาให้กับนักพัฒนาที่แตกต่างกันโดยสิ้นเชิงซึ่งเป็นผู้พัฒนา com.jutils. * ไลบรารี่ที่ได้รับความนิยม ห้องสมุดที่มีอยู่
Allon Guralnek

15

คุณกำลังมองหาวิธีแก้ปัญหาที่แตกต่างกันคือเราจะหลีกเลี่ยงโปรแกรมเมอร์ X และโปรแกรมเมอร์ Y ขั้นตอนที่แต่ละคนอื่น ๆ ด้วยการวางไฟล์ลงในแพ็คเกจเดียวกัน

"เพียงแค่ย้อนกลับชื่อโดเมนของคุณ" แก้ปัญหานี้ในลักษณะที่สวยงามเนื่องจากคุณค่อนข้างแน่ใจว่าถ้า X และ Y ไม่เกี่ยวข้องพวกเขาจะไม่เลือกพื้นที่ชื่อแพคเกจเดียวกัน


+1 "คุณกำลังหาทางแก้ไขปัญหาอื่น"
user359996

10

การประชุมไม่สมบูรณ์ ผู้คนมีข้อบกพร่องตามที่คุณได้อธิบายไว้อย่างดี

ฉันนึกถึงประโยชน์ 2 อย่าง:

  1. มันหลีกเลี่ยงการปะทะกันระหว่างนักพัฒนาอิสระ โดเมนไม่ซ้ำกัน คนสองคนสามารถตั้งชื่อโครงการที่แตกต่างกันสองโครงการได้เหมือนกัน แต่โดเมนมีเจ้าของอย่างเดียว
  2. ทำให้การค้นหาผู้ดูแลทำได้ง่ายขึ้น หากคุณสืบทอดฐานรหัสที่ใช้ไลบรารีโอเพนซอร์ซบางส่วนควรอยู่ในแพ็คเกจที่ช่วยคุณค้นหา ตอนนี้มันไม่สำคัญเพราะคุณจะสามารถ google ได้แน่นอนที่สุด แต่เมื่อ 10 ปีที่แล้วมันก็ไม่ชัดเจน

7

ชื่อโดเมนย้อนกลับถูกใช้เพื่อหลีกเลี่ยงการชนชื่อในกรณีที่องค์กรต่าง ๆ ใช้ชื่อคลาสเดียวกันในไลบรารีของพวกเขา มันเป็นวิธีการแก้ปัญหาที่ง่ายและ cource นอกมีข้อบกพร่องบางอย่าง (เช่นสิ่งที่เกี่ยวกับการชนกันของชื่อสำหรับชั้นเรียนในองค์กรเดียวกัน?)

คุณไม่จำเป็นต้องใช้มันเป็นแบบแผนไม่ใช่กฎการทำหรือตาย ตัวอย่างเช่นบางเขียนโปรแกรม Java ไม่เคารพอนุสัญญา Java รหัส

แต่พิจารณาทางเลือก ตัวอย่างเช่นคุณจะชอบชื่อคลาสที่ผ่านการรับรองโดยสมบูรณ์สองชื่อสำหรับ LogFactory:

a50e8400_e29b_41d4_a716_446655440000.LogFactory
f47ac10b_58cc_4372_a567_0e02b2c3d479.Logfactory

หรือ

org.apache.commons.logging.LogFactory
com.evilcorp.logging.LogFactory

ดังนั้นในความคิดของฉันให้ใช้สิ่งที่คุณต้องการตราบเท่าที่มันมีสามัญสำนึกและการพิจารณาสำหรับผู้ใช้ห้องสมุดของคุณ


4

เมื่อฉันเริ่มโครงการใหม่ฉันมักจะยืนยันในชื่อภายในและไม่สามารถเปลี่ยนแปลงได้ที่คนการตลาดอาจจะหรืออาจไม่รู้เพราะมันจะถูกอ้างถึงในซอร์สโค้ดเท่านั้น ด้วยวิธีนี้ฉันไม่ต้องกังวลเกี่ยวกับการเปลี่ยนชื่อโครงการและเนมสเปซมลพิษ

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.