การตั้งชื่อคลาสนามธรรมของ Java


9

ตัวอย่าง:

คุณสร้างคลาสนามธรรมสำหรับการกระทำ Ajax การกระทำของอาแจ็กซ์ที่แตกต่างกันจะขยายชั้นนี้ทั้งหมด

ปัญหา:

  1. คุณชื่อคลาส AjaxAction หรือ AbstractAjaxAction หรือไม่
  2. เมื่อคุณสร้างคลาสย่อยคุณตั้งชื่อพวกเขา:
    • หนังบู๊
    • AjaxAction
    • เพียงแค่ตั้งชื่อพวกเขาว่าพวกเขาคืออะไร

ฉันไม่สามารถค้นหาสิ่งที่ประชุม "ทางการ" คืออะไร ฉันไม่เห็นความต้องการคำนำหน้า "นามธรรม" หรือข้อกำหนดการตั้งชื่อใด ๆ ที่จำเป็นในคลาสย่อย (อาจพอดีอย่างไรก็ตามขึ้นอยู่กับ)

มีการประชุมอย่างเป็นทางการหรือไม่? คุณช่วยเชื่อมโยงฉันกับมันได้ไหม และคุณมีความคิดเห็นอย่างไรในเรื่องนี้?

คำตอบ:


16

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

ที่เดียวที่จะมองหาคำแนะนำ / แรงบันดาลใจในการตั้งชื่อคือ Java API ฉันไม่สามารถนึกถึงส่วนใด ๆ ที่ใช้คำนำหน้า (ยกเว้นอย่างมากคือ Collections API ซึ่งใช้คำนำหน้าบทคัดย่ออย่างหนัก) การค้นหาต่อไปนี้จะให้ตัวอย่างที่ดีงาม:

"คลาสนามธรรมสาธารณะ" ที่ download.oracle.com/javase/6

คุณจะพบว่าคลาสนามธรรมมีชื่ออะไรบางอย่างที่เป็นนามธรรมและ subclasses ที่เป็นรูปธรรมมีชื่อว่าอะไรที่เป็นรูปธรรมมากกว่า ยกตัวอย่างเช่นระดับนามธรรมReaderมี subclasses คอนกรีตBufferedReader, StringReader, InputStreamReaderฯลฯ

เนื่องจากคลาสย่อยที่เป็นรูปธรรมของคุณเป็นคลาสนามธรรมที่เฉพาะเจาะจงมากขึ้นของคุณจึงมีเจตนาที่จะเปิดเผยชื่อของคุณในแบบเดียวกัน ในตัวอย่างของคุณฉันจะตั้งชื่อคลาสนามธรรมAjaxActionและใช้ในชื่อสำหรับคลาสย่อยคอนกรีต ( SpecificAjaxAction)


12

เลือกบางสิ่งบางอย่างและสอดคล้อง ไม่ว่าคุณจะใช้คำต่อท้ายBaseเพื่อระบุคลาสพื้นฐานที่ต้องการหรือส่วนนำหน้าAbstractให้สอดคล้องกับมัน

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


4

ฉันจะตั้งชื่อคลาสนามธรรมAjaxActionBaseและคลาสสำหรับเด็กที่ต่อท้ายด้วย 'Action' หรือ 'AjaxAction' ไม่ว่าจะจบลงด้วยวิธีใดก็ตาม


0

ฉันชอบที่จะบอกใบ้ว่าคลาสนั้นมีความเป็นนามธรรมในชื่อด้วยเหตุผลง่ายๆ แต่สำคัญมาก:

  • เป็นการดีกว่าที่จะสร้าง API ของคุณรอบ ๆ อินเทอร์เฟซแทนที่จะเป็นคลาสที่เป็นนามธรรม
  • คุณต้องการใช้ชื่อแบบง่าย ๆ เช่น "การกระทำ" เพื่อตั้งชื่ออินเทอร์เฟซของคุณ ดูตัวอย่าง List หรือ Map ใน Java Collections API ทั้งหมดนี้เป็นอินเตอร์เฟส

ดังนั้นฉันมักจะเรียกคลาสนามธรรมระดับบนสุดทั้ง AbstractAction หรือ BaseAction หากไม่มีความต้องการที่เฉพาะเจาะจงฉันจะไม่เปิดเผยต่อสาธารณะเหล่านี้เพื่อให้ผู้ใช้รหัสได้รับการแนะนำให้ใช้อินเทอร์เฟซ คลาสพื้นฐานที่เป็นนามธรรมควรเป็นรายละเอียดการนำไปปฏิบัติแทนที่จะเป็นคุณลักษณะของ API ของคุณเว้นแต่คุณจะระมัดระวังอย่างมากเกี่ยวกับวิธีที่คุณต้องการให้คนขยาย

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